MongoDB에서 내장 문서 내부를 검색하는 방법
MongoDB에서 문서 안에 중첩된 객체(해시)의 내부 필드를 조회하려면 점(.) 표기법(dot notation)을 사용하면 됩니다. 점 표기법은 상위 필드 이름과 하위 필드 이름을 마침표로 연결하여 중첩된 데이터에 접근하는 방식입니다.
이번 글에서는 실제 예제를 통해 컬렉션 생성부터 내장 문서 내부 값 검색까지 단계별로 살펴보겠습니다.
1단계: 샘플 데이터가 있는 컬렉션 생성
먼저 insertOne() 메서드를 사용하여 문서가 포함된 컬렉션을 생성합니다.
> db.hashDemo.insertOne({"ClientName":"Larry","ClientAge":23,"ClientDetails":{ "isEducated": true, "ClientProject" : "University Management"}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca1ef1266324ffac2a7dc5e")
}
> db.hashDemo.insertOne({"ClientName":"Chris","ClientAge":26,"ClientDetails":{ "isEducated":false, "ClientProject" : "Online Book Store"}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca1ef7766324ffac2a7dc5f")
}위 명령어는 hashDemo라는 컬렉션에 두 개의 클라이언트 문서를 삽입합니다. 각 문서는 ClientDetails라는 내장 문서를 포함하고 있으며, 그 안에 isEducated와 ClientProject 필드가 존재합니다.
2단계: find() 메서드로 전체 문서 확인
find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다. pretty()를 함께 사용하면 결과를 보기 좋게 정렬해서 출력합니다.
> db.hashDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5ca1ef1266324ffac2a7dc5e"),
"ClientName" : "Larry",
"ClientAge" : 23,
"ClientDetails" : {
"isEducated" : true,
"ClientProject" : "University Management"
}
}
{
"_id" : ObjectId("5ca1ef7766324ffac2a7dc5f"),
"ClientName" : "Chris",
"ClientAge" : 26,
"ClientDetails" : {
"isEducated" : false,
"ClientProject" : "Online Book Store"
}
}3단계: 점 표기법으로 내장 문서 내부 값 검색
이제 핵심인 내장 문서 내부 검색입니다. 상위 필드와 하위 필드를 마침표로 연결한 "ClientDetails.isEducated" 형태의 조건을 사용하면 됩니다.
> db.hashDemo.find({"ClientDetails.isEducated" : false, "ClientDetails.ClientProject" : "Online Book Store"}).pretty();위 쿼리는 isEducated가 false이면서 ClientProject가 "Online Book Store"인 문서만 찾습니다. 실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5ca1ef7766324ffac2a7dc5f"),
"ClientName" : "Chris",
"ClientAge" : 26,
"ClientDetails" : {
"isEducated" : false,
"ClientProject" : "Online Book Store"
}
}정리
MongoDB에서 중첩된 문서(해시) 내부의 특정 값을 조회할 때는 반드시 점 표기법을 사용해야 합니다. 조건을 큰따옴표로 감싸 "상위필드.하위필드" 형태로 작성하는 것이 핵심이며, 여러 조건을 동시에 지정하면 AND 조건으로 처리됩니다. 이 방식을 익히면 복잡하게 중첩된 데이터 구조에서도 원하는 문서를 정확하고 빠르게 검색할 수 있습니다.