MongoDB에서 내장된 문서(embedded document)의 하위 필드를 기준으로 데이터를 조회하려면 점(.) 표기법(dot notation)을 사용하면 됩니다. 점 표기법은 상위 필드 이름과 하위 필드 이름을 마침표로 연결하여 중첩된 데이터에 직접 접근할 수 있게 해주는 방식입니다.
1. 샘플 컬렉션 생성 및 문서 삽입
먼저 실습용 컬렉션을 만들고 문서를 삽입해 보겠습니다. insertOne() 메서드를 사용해 학생 정보가 담긴 문서 두 개를 추가합니다.
> db.queryBySubFieldDemo.insertOne(
... {
... "StudentPersonalDetails" : {"StudentName" : "John","StudentHobby" :"Photography"},
... "StudentScores" : {"MathScore" : 56}
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5c92c2995259fcd195499808")
}
> db.queryBySubFieldDemo.insertOne(
... {
... "StudentPersonalDetails" : {"StudentName" : "Chris","StudentHobby" :"Reading"},
... "StudentScores" : {"MathScore" : 97}
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5c92c2df5259fcd195499809")
}위 문서 구조를 보면 StudentPersonalDetails와 StudentScores라는 두 개의 상위 필드 안에 각각 하위 필드들이 중첩되어 있는 것을 확인할 수 있습니다.
2. 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다. pretty()를 함께 사용하면 결과를 보기 좋게 정렬된 형태로 출력합니다.
> db.queryBySubFieldDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c92c2995259fcd195499808"),
"StudentPersonalDetails" : {
"StudentName" : "John",
"StudentHobby" : "Photography"
},
"StudentScores" : {
"MathScore" : 56
}
}
{
"_id" : ObjectId("5c92c2df5259fcd195499809"),
"StudentPersonalDetails" : {
"StudentName" : "Chris",
"StudentHobby" : "Reading"
},
"StudentScores" : {
"MathScore" : 97
}
}3. 하위 필드로 쿼리 실행하기
이제 핵심인 하위 필드 쿼리입니다. 상위 필드 이름 뒤에 점(.)을 붙이고 하위 필드 이름을 이어 적으면 됩니다. 예를 들어, 학생 이름이 "Chris"인 문서만 조회하려면 다음과 같이 작성합니다.
> db.queryBySubFieldDemo.find({"StudentPersonalDetails.StudentName":"Chris"}).pretty();실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c92c2df5259fcd195499809"),
"StudentPersonalDetails" : {
"StudentName" : "Chris",
"StudentHobby" : "Reading"
},
"StudentScores" : {
"MathScore" : 97
}
}정리 및 참고 사항
점 표기법을 사용할 때는 몇 가지 주의할 점이 있습니다.
- 따옴표 필수: 점 표기법으로 된 필드 경로는 반드시 큰따옴표(")로 감싸야 합니다. 위 예제에서도
"StudentPersonalDetails.StudentName"처럼 따옴표 안에 전체 경로를 넣었습니다. - 깊은 중첩도 가능: 하위 필드가 여러 단계로 중첩되어 있어도
"상위필드.중간필드.최하위필드"형태로 계속 연결해서 접근할 수 있습니다. - 배열 요소 접근: 배열 내 특정 위치의 요소에 접근할 때는 인덱스를 활용한
"필드명.0.하위필드"형태도 사용할 수 있습니다.
이처럼 점 표기법만 익히면 복잡하게 중첩된 MongoDB 문서에서도 원하는 하위 필드 값을 손쉽게 조건으로 지정해 조회할 수 있습니다.