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

MongoDB에서 $project를 활용해 배열의 특정 필드만 표시하고 나머지 필드는 제외하는 방법

MongoDB에서 배열 안의 특정 필드만 결과로 표시하고 다른 필드는 제외하고 싶다면 $unwind$project를 함께 사용하면 됩니다. $project 단계에서 제외할 필드의 값을 0으로 설정하면 해당 필드는 최종 출력에서 생략됩니다.

1. 예제 컬렉션 생성 및 문서 삽입

먼저 실습에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.

> db.demo731.insertOne({ "ProductInformation": [ { ProductId:"Product-1", ProductPrice:80 }, { ProductId:"Product-2", ProductPrice:45 }, { ProductId:"Product-3", ProductPrice:50 } ] } );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5eac5efd56e85a39df5f6341")
}

2. find()로 전체 문서 확인

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

> db.demo731.find();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5eac5efd56e85a39df5f6341"), "ProductInformation" : [ { "ProductId" : "Product-1", "ProductPrice" : 80 }, { "ProductId" : "Product-2", "ProductPrice" : 45 }, { "ProductId" : "Product-3", "ProductPrice" : 50 } ] }

3. $unwind와 $project로 특정 필드만 조회하기

이제 집계 파이프라인(aggregate)을 사용해 배열 내 특정 필드만 표시해 보겠습니다. 각 단계의 역할은 다음과 같습니다.

  • $unwind: 배열을 개별 문서로 분해합니다.
  • $match: 조건(여기서는 ProductPrice가 80)에 일치하는 문서만 필터링합니다.
  • $project: _id와 ProductInformation.ProductPrice 필드를 0으로 설정하여 결과에서 제외합니다.
> db.demo731.aggregate([
...    { $unwind: "$ProductInformation" },
...    { $match: { "ProductInformation.ProductPrice": 80} },
...    { $project: {_id: 0,"ProductInformation.ProductPrice":0}}
... ])

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "ProductInformation" : { "ProductId" : "Product-1" } }

정리

이처럼 $unwind로 배열을 분해한 뒤 $match로 원하는 데이터를 걸러내고, $project에서 제외할 필드를 0으로 지정하면 배열 안에서 필요한 필드만 깔끔하게 추출할 수 있습니다. 반대로 표시할 필드를 1로 설정하면 해당 필드만 선택적으로 출력되므로, 상황에 맞게 활용하시기 바랍니다.