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

MongoDB에서 두 개의 필드를 선택해 고유 값으로 정렬된 배열 반환하기

MongoDB에서 두 개의 필드를 선택하고 중복을 제거한 고유(distinct) 값으로 정렬된 배열을 반환하려면 애그리게이션 프레임워크(aggregate framework)$setUnion 연산자를 함께 사용하면 됩니다.

1. 샘플 컬렉션 생성

먼저 테스트에 사용할 문서들을 담은 컬렉션을 생성합니다.

> db.sortedArrayWithDistinctDemo.insertOne(
...     { value1: 4, value2: 5 }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cc690b99cb58ca2b005e666")
}
> db.sortedArrayWithDistinctDemo.insertOne(
...     { value1: 5, value2: 6 }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cc690b99cb58ca2b005e667")
}
> db.sortedArrayWithDistinctDemo.insertOne(
...     { value1: 7, value2: 4 }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cc690b99cb58ca2b005e668")
}

2. 저장된 문서 확인하기

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

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

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

{ "_id" : ObjectId("5cc690b99cb58ca2b005e666"), "value1" : 4, "value2" : 5 }
{ "_id" : ObjectId("5cc690b99cb58ca2b005e667"), "value1" : 5, "value2" : 6 }
{ "_id" : ObjectId("5cc690b99cb58ca2b005e668"), "value1" : 7, "value2" : 4 }

3. 두 필드의 고유 값을 정렬된 배열로 반환하는 쿼리

이제 두 개의 필드(value1, value2)를 선택하여 고유 값만 모아 정렬된 배열로 반환하는 애그리게이션 쿼리를 작성합니다.

쿼리의 동작 방식은 다음과 같습니다.

  • $group: _id를 null로 지정해 전체 문서를 하나의 그룹으로 묶고, 각 필드의 값들을 $push로 배열에 수집합니다.
  • $project: _id 필드는 제외(0)하고, $setUnion으로 두 배열을 합칩니다. $setUnion은 자동으로 중복을 제거하고 오름차순으로 정렬된 결과를 반환합니다.
> db.sortedArrayWithDistinctDemo.aggregate(
...     [
...        { "$group": {
...            "_id": null,
...            "value1": { "$push": "$value1" },
...            "value2": { "$push": "$value2" }
...        }},
...        { "$project": {
...            "_id": 0,
...            "bothValues": { "$setUnion": [ "$value1", "$value2" ] }
...        }}
...     ]
... );

4. 실행 결과

쿼리를 실행하면 두 필드의 값이 합쳐지고, 중복된 값(예: 4와 5)은 제거되어 정렬된 배열이 반환됩니다.

{ "bothValues" : [ 4, 5, 6, 7 ] }

이처럼 $setUnion 연산자를 활용하면 별도의 정렬 단계 없이도 여러 필드의 값을 하나의 배열로 병합하면서 동시에 중복 제거와 정렬까지 한 번에 처리할 수 있습니다.