Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB find()로 중첩 키(내부 필드) 검색하는 방법 – 점(.) 표기법 완벽 가이드

MongoDB에서 find() 메서드를 사용해 중첩된 키(nested key), 즉 내부 필드를 검색하려면 점(.) 표기법(dot notation)을 활용하면 됩니다. 외부 필드명과 내부 필드명을 마침표로 연결해 하나의 문자열로 묶어 쿼리 조건으로 지정하는 방식입니다.

중첩 키 검색 기본 문법

db.yourCollectionName.find({"yourOuterFieldName.yourInnerFieldName":"yourValue"}).pretty();

이때 주의할 점은 외부필드명.내부필드명 전체를 반드시 따옴표(" ")로 감싸야 한다는 것입니다. 따옴표 없이 작성하면 자바스크립트 객체 리터럴 문법 오류가 발생합니다.

1. 예제용 컬렉션 생성

먼저 실습에 사용할 컬렉션과 문서를 생성해 보겠습니다.

> db.searchForNestedKeysDemo.insertOne({"ClientName":"Larry","ClientAge":28,"ClientExtraDetails":{"isEducated":true,"CountryName":"US"}});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ca20e8b66324ffac2a7dc64")
}
> db.searchForNestedKeysDemo.insertOne({"ClientName":"Chris","ClientAge":29,"ClientExtraDetails":{"isEducated":false,"CountryName":"UK"}});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ca20ea366324ffac2a7dc65")
}
> db.searchForNestedKeysDemo.insertOne({"ClientName":"David","ClientAge":39,"ClientExtraDetails":{"isEducated":true,"CountryName":"AUS"}});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ca20eba66324ffac2a7dc66")
}

위 예제에서는 ClientExtraDetails라는 외부 필드 안에 isEducatedCountryName이라는 내부 필드가 중첩되어 있는 구조입니다.

2. 저장된 전체 문서 확인

find() 메서드로 컬렉션의 모든 문서를 조회해 보겠습니다.

> db.searchForNestedKeysDemo.find().pretty();

실행 결과는 다음과 같습니다.

{
   "_id" : ObjectId("5ca20e8b66324ffac2a7dc64"),
   "ClientName" : "Larry",
   "ClientAge" : 28,
   "ClientExtraDetails" : {
      "isEducated" : true,
      "CountryName" : "US"
   }
}
{
   "_id" : ObjectId("5ca20ea366324ffac2a7dc65"),
   "ClientName" : "Chris",
   "ClientAge" : 29,
   "ClientExtraDetails" : {
      "isEducated" : false,
      "CountryName" : "UK"
   }
}
{
   "_id" : ObjectId("5ca20eba66324ffac2a7dc66"),
   "ClientName" : "David",
   "ClientAge" : 39,
   "ClientExtraDetails" : {
      "isEducated" : true,
      "CountryName" : "AUS"
   }
}

3. 점(.) 표기법으로 중첩 키 검색하기

이제 본격적으로 중첩된 키를 검색하는 쿼리를 실행해 보겠습니다. 여기서는 ClientExtraDetails.CountryName 값이 "UK"인 문서를 찾습니다.

> db.searchForNestedKeysDemo.find({"ClientExtraDetails.CountryName":"UK"}).pretty();

실행 결과는 다음과 같습니다.

{
   "_id" : ObjectId("5ca20ea366324ffac2a7dc65"),
   "ClientName" : "Chris",
   "ClientAge" : 29,
   "ClientExtraDetails" : {
      "isEducated" : false,
      "CountryName" : "UK"
   }
}

조건에 일치하는 Chris의 문서만 정확히 반환된 것을 확인할 수 있습니다.

추가 팁: 더 깊은 중첩 구조도 동일하게 처리 가능

점 표기법은 한 단계가 아닌 여러 단계의 중첩에도 그대로 적용됩니다. 예를 들어 a.b.c처럼 세 단계 깊이의 필드도 {"a.b.c": "값"} 형태로 검색할 수 있습니다.

또한 배열 요소 내부의 필드를 검색할 때도 점 표기법을 사용합니다. 예를 들어 items.name은 배열 items 안의 각 요소가 가진 name 필드를 대상으로 조건을 평가합니다.

  • 문자열 필드 검색: {"외부필드.내부필드": "값"}
  • 숫자·불린 필드 검색: {"외부필드.내부필드": true} 또는 {"외부필드.내부필드": 28}
  • 비교 연산자 활용: {"외부필드.내부필드": { $gte: 30 }}

이처럼 MongoDB의 점(.) 표기법만 익혀두면 중첩된 문서 구조 어디에 있는 데이터든 손쉽게 조회할 수 있습니다.