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

MongoDB 집계(Aggregation)로 특정 필드 값이 있는 문서 조회하기

MongoDB에서 특정 필드 값과 일치하는 문서를 조회하려면 aggregate() 메서드를 사용하면 됩니다. 이번 글에서는 배열 형태의 하위 문서에서 "Age" 필드 값이 21인 데이터만 추출하는 방법을 단계별로 살펴보겠습니다.

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

먼저 예제에 사용할 컬렉션을 만들고 문서를 삽입합니다. 아래 예시에서는 details라는 배열 안에 여러 사람의 이름(Name)과 나이(Age) 정보가 들어 있습니다.

> db.demo685.insertOne(
...     {
...        "details":
...        [
...           {
...              Name:"Chris",
...              Age:21
...           },
...           {
...              Name:"David",
...              Age:23
...           },
...           {
...              Name:"Bob",
...              Age:21
...           }
...        ]
...     }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ea54f6fa7e81adc6a0b395b")
}

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

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

> db.demo685.find();

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5ea54f6fa7e81adc6a0b395b"), "details" : [
    { "Name" : "Chris", "Age" : 21 },
    { "Name" : "David", "Age" : 23 },
    { "Name" : "Bob", "Age" : 21 } 
] }

3. 집계 파이프라인으로 특정 값 조회

이제 집계(aggregation) 쿼리를 사용해 Age 값이 21인 문서만 추출해 보겠습니다. 핵심은 세 가지 단계입니다.

  • $unwind: details 배열을 개별 문서로 분해합니다.
  • $match: details.Age가 21인 문서만 필터링합니다.
  • $project: 불필요한 _id 필드를 제거하여 깔끔한 결과를 출력합니다.
> db.demo685.aggregate([ { $unwind: "$details" }, { $match: { "details.Age": 21 } }, { $project: {_id: 0}} ]).pretty();

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

{ "details" : { "Name" : "Chris", "Age" : 21 } }
{ "details" : { "Name" : "Bob", "Age" : 21 } }

정리

배열 내부의 중첩된 문서에서 조건에 맞는 데이터를 찾으려면 단순히 find()만으로는 부족할 수 있습니다. 이럴 때 $unwind → $match → $project 순서로 구성된 집계 파이프라인을 활용하면 원하는 필드 값만 정확하고 효율적으로 추출할 수 있습니다.