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

MongoDB 프로젝션으로 중첩 문서에서 특정 필드 하나만 남기고 나머지 모두 제외하는 방법

MongoDB에서 원하지 않는 필드의 값을 0으로 설정하면 find() 메서드 실행 시 해당 필드는 결과에서 제외되고 나머지 값들만 표시됩니다. 이번 글에서는 프로젝션(projection)을 활용하여 중첩 문서(nested document) 안에서 특정 필드 하나만 남기고 나머지를 모두 제거하는 방법을 예제와 함께 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 문서가 포함된 컬렉션을 생성합니다.

> db.demo237.insertOne({
...  _id:101,
...  Product: {
...     description1: {id:1001 },
...     description2: {Name:"Product-1" },
...     description3: {Price:550 }
...  }
...}
...);
{ "acknowledged" : true, "insertedId" : 101 }

2. 전체 문서 조회하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.

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

위 쿼리를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

{
   "_id" : 101,
   "Product" : {
      "description1" : {
         "id" : 1001
      },
      "description2" : {
         "Name" : "Product-1"
      },
      "description3" : {
         "Price" : 550
      }
   }
}

3. 프로젝션으로 특정 필드만 남기고 제외하기

이제 중첩 문서에서 description2(Name) 필드만 남기고 나머지 필드들을 제외하는 쿼리를 실행해 보겠습니다. 제외하고 싶은 필드인 Product.description1Product.description3의 값을 0으로 설정하면 됩니다.

> db.demo237.find({}, { "Product.description1": 0, "Product.description3": 0 });

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

{ "_id" : 101, "Product" : { "description2" : { "Name" : "Product-1" } } }

출력 결과를 보면 Product 객체 내부에서 description2 필드만 남아 있고, 값이 0으로 설정된 description1과 description3은 결과에서 제외된 것을 확인할 수 있습니다. 이처럼 MongoDB의 프로젝션 기능을 사용하면 중첩 문서 내부의 불필요한 필드를 손쉽게 걸러내고 원하는 데이터만 효율적으로 조회할 수 있습니다.