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

MongoDB에서 내장(임베디드) 문서의 필드를 쿼리하는 방법

MongoDB는 문서 안에 또 다른 문서나 배열을 포함하는 내장 문서(Embedded Document) 구조를 지원합니다. 이러한 중첩된 필드에 접근하려면 점 표기법(dot notation)을 사용하면 됩니다. 이 글에서는 내장 문서가 포함된 컬렉션을 만들고, 특정 필드 값을 기준으로 데이터를 조회하는 방법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 고객 정보 배열을 포함하는 문서를 가진 컬렉션을 생성해 보겠습니다. insertOne() 메서드를 사용합니다.

> db.embeddedDocumentDemo.insertOne(
...    {
...       "CustomerDetails": [
...          {"CustomerName":"Chris", "CustomerPurchasePrice":3000},
...          {"CustomerName":"Robert", "CustomerPurchasePrice":4500},
...          {"CustomerName":"David", "CustomerPurchasePrice":1000}
...       ]
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd32347edc6604c74817ccd")
}

위 명령이 성공적으로 실행되면 acknowledged: true와 함께 생성된 문서의 ObjectId가 반환됩니다.

2. 전체 문서 조회하기

find() 메서드로 컬렉션의 모든 문서를 확인할 수 있습니다. 결과를 보기 좋게 정렬하려면 pretty()를 함께 사용합니다.

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

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

{
   "_id" : ObjectId("5cd32347edc6604c74817ccd"),
   "CustomerDetails" : [
      {
         "CustomerName" : "Chris",
         "CustomerPurchasePrice" : 3000
      },
      {
         "CustomerName" : "Robert",
         "CustomerPurchasePrice" : 4500
      },
      {
         "CustomerName" : "David",
         "CustomerPurchasePrice" : 1000
      }
   ]
}

3. 내장 문서의 필드로 조건 검색하기

내부 배열에 있는 특정 필드 값을 기준으로 문서를 찾으려면 "상위필드.하위필드" 형태의 점 표기법을 사용합니다. 예를 들어 구매 금액(CustomerPurchasePrice)이 4500인 고객이 포함된 문서를 조회하려면 다음과 같이 작성합니다.

> db.embeddedDocumentDemo.find({"CustomerDetails.CustomerPurchasePrice":4500});

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

{ "_id" : ObjectId("5cd32347edc6604c74817ccd"), "CustomerDetails" : [ { "CustomerName" : "Chris", "CustomerPurchasePrice" : 3000 }, { "CustomerName" : "Robert", "CustomerPurchasePrice" : 4500 }, { "CustomerName" : "David", "CustomerPurchasePrice" : 1000 } ] }

정리 및 참고 사항

MongoDB에서 내장 문서의 필드를 쿼리할 때 기억할 핵심 포인트는 다음과 같습니다.

  • 점 표기법: 내장 필드에 접근할 때는 반드시 큰따옴표로 감싼 문자열 형태인 "CustomerDetails.CustomerPurchasePrice"처럼 작성해야 합니다.
  • 배열 자동 순회: 쿼리 대상 필드가 배열 안에 있어도 MongoDB는 자동으로 모든 요소를 검사하여 조건에 맞는 요소가 하나라도 있으면 해당 문서를 반환합니다.
  • 문서 단위 반환: 위 예제에서 볼 수 있듯이, 조건은 배열의 일부 요소만 충족하더라도 해당 문서 전체가 그대로 반환됩니다. 배열 요소 중 일부만 가져오려면 $elemMatch나 집계 파이프라인의 $filter 연산자를 활용할 수 있습니다.

이처럼 점 표기법만 익히면 중첩된 구조의 데이터도 손쉽게 조회할 수 있습니다.