MongoDB에서 중첩된 필드 값 검색하기
MongoDB에서 문서 내부에 중첩된(nested) 특정 값을 찾으려면 find() 메서드를 사용할 때 점(.) 표기법과 함께 더블 언더스코어(__)를 활용하면 됩니다. 이 글에서는 실제 예제를 통해 중첩된 값을 검색하는 방법을 단계별로 살펴보겠습니다.
1. 테스트용 컬렉션 생성
먼저 중첩된 구조를 가진 문서들을 포함하는 컬렉션을 생성합니다. 아래 예제에서는 Information 객체 안에 __StudentName 필드가 중첩되어 있는 형태입니다.
> db.nestedDemo.insertOne({"Information":{"__StudentName":"John Smith"}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e06f39125ddae1f53b621f0")
}
> db.nestedDemo.insertOne({"Information":{"__StudentName":"John Doe"}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e06f39e25ddae1f53b621f1")
}
> db.nestedDemo.insertOne({"Information":{"__StudentName":"Chris Brown"}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e06f3a625ddae1f53b621f2")
}세 개의 문서가 성공적으로 삽입되었습니다. 각 문서는 Information이라는 하위 문서를 가지며, 그 안에 학생 이름이 저장되어 있습니다.
2. 전체 문서 조회하기
컬렉션에 저장된 모든 문서를 확인하려면 find() 메서드와 함께 pretty()를 사용합니다. pretty()는 결과를 보기 쉽게 정렬된 형태로 출력해 줍니다.
> db.nestedDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5e06f39125ddae1f53b621f0"),
"Information" : {
"__StudentName" : "John Smith"
}
}
{
"_id" : ObjectId("5e06f39e25ddae1f53b621f1"),
"Information" : {
"__StudentName" : "John Doe"
}
}
{
"_id" : ObjectId("5e06f3a625ddae1f53b621f2"),
"Information" : {
"__StudentName" : "Chris Brown"
}
}3. 중첩된 값 검색하기
이제 본격적으로 중첩된 값을 검색해 보겠습니다. MongoDB에서 하위 문서의 필드에 접근할 때는 점 표기법(dot notation)을 사용합니다. 즉, 상위 필드명과 하위 필드명을 마침표로 연결하여 "Information.__StudentName"처럼 작성하면 됩니다.
예를 들어, 학생 이름이 "John Doe"인 문서를 찾고 싶다면 다음과 같이 쿼리를 작성합니다.
> db.nestedDemo.find({"Information.__StudentName":"John Doe"});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e06f39e25ddae1f53b621f1"), "Information" : { "__StudentName" : "John Doe" } }조건과 일치하는 문서 하나만 정확하게 반환된 것을 확인할 수 있습니다.
정리
MongoDB에서 중첩된 문서의 값을 검색하는 방법을 정리하면 다음과 같습니다.
find()메서드의 조건으로 점 표기법("상위필드.하위필드")을 사용합니다.- 필드명에 특수문자나 언더스코어가 포함되어 있어도 문자열로 감싸주면 정상적으로 동작합니다.
- 검색 조건은 정확히 일치하는 값뿐만 아니라 비교 연산자 등 다양한 방식으로 확장할 수 있습니다.
이처럼 점 표기법만 익혀두면 깊게 중첩된 문서 구조에서도 원하는 데이터를 손쉽게 조회할 수 있습니다.