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

MongoDB 집계 파이프라인으로 서로 다른 필드의 값을 하나의 배열로 병합하는 방법

MongoDB에서 여러 속성의 값을 단일 배열로 병합하기

값을 병합(coalesce)한다는 것은 여러 값을 하나로 합치는 것을 의미합니다. MongoDB에서 서로 다른 속성에 담긴 값들을 단일 배열로 합치려면 $project 연산자를 활용하면 됩니다.

이 과정을 단계별로 살펴보겠습니다.

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

먼저 컬렉션을 만들고 문서를 삽입합니다.

> db.demo244.insertOne({"Value1":10,"Value2":20});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e4582e31627c0c63e7dba63")
}
> db.demo244.insertOne({"Value1":20,"Value2":30});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e4582f11627c0c63e7dba64")
}

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

find() 메서드를 사용해 컬렉션의 모든 문서를 조회할 수 있습니다.

> db.demo244.find();

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

{ "_id" : ObjectId("5e4582e31627c0c63e7dba63"), "Value1" : 10, "Value2" : 20 }
{ "_id" : ObjectId("5e4582f11627c0c63e7dba64"), "Value1" : 20, "Value2" : 30 }

3. 집계 파이프라인으로 값 병합

다음은 MongoDB 집계(aggregation)를 사용해 서로 다른 속성의 값들을 하나의 배열로 병합하는 쿼리입니다.

먼저 $group 단계에서 $addToSet 연산자를 사용해 각 필드의 고유한 값들을 개별 배열로 수집하고, 이어지는 $project 단계에서 $setUnion 연산자로 두 배열을 하나로 합칩니다.

> db.demo244.aggregate([
...    { "$group": {
...       "_id": null,
...       "v1": { "$addToSet": "$Value1" },
...       "v2": { "$addToSet": "$Value2" }
...    }},
...
...    { "$project": {
...       "AllValues": { "$setUnion": [ "$v1", "$v2" ] }
...    }}
...]);

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

{ "_id" : null, "AllValues" : [ 10, 20, 30 ] }

핵심 포인트 정리

  • $addToSet: 그룹 내에서 중복 없이 고유한 값만 배열에 추가합니다.
  • $setUnion: 두 개 이상의 배열을 합치면서 중복 요소를 제거합니다.
  • _id: null: 전체 컬렉션을 하나의 그룹으로 묶어 모든 문서의 값을 한 번에 처리합니다.

이처럼 MongoDB의 집계 파이프라인을 활용하면 분산되어 있는 여러 필드의 값을 손쉽게 하나의 배열로 통합할 수 있습니다.