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

MongoDB 객체 배열에서 고유한 값 추출하기 – distinct() 메서드 활용법

MongoDB 객체 배열에서 고유한 값 추출하는 방법

MongoDB에서 객체(object) 배열 안에 저장된 필드의 고유한(distinct) 값을 추출하려면 distinct() 메서드를 사용하면 됩니다. 이 메서드는 지정한 필드에서 중복을 제거한 값들의 목록을 배열 형태로 반환해 줍니다.

아래 예제를 통해 실제 동작 과정을 단계별로 살펴보겠습니다.

1단계: 샘플 컬렉션 생성

먼저 문서를 포함하는 컬렉션을 생성합니다. 아래 예제에서는 여러 사람의 이름과 나이가 담긴 "Information" 객체 배열을 가진 문서를 삽입합니다.

> db.demo442.insertOne(
...    {
...       "Information" : [
...          {
...              "FirstName" : "John",
...              "Age" : 21
...          },
...          {
...              "FirstName" : "Sam",
...              "Age" : 23
...          },
...          {
...              "FirstName" : "John",
...              "Age" : 24
...          },
...          {
...              "FirstName" : "Carol",
...              "Age" : 20
...          },
...          {
...              "FirstName" : "Sam",
...              "Age" : 22
...          }
...    ]
...   }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e78cf29bbc41e36cc3caeb8")
}

2단계: find() 메서드로 전체 문서 조회

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 화면에 표시할 수 있습니다.

> db.demo442.find();

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

{ "_id" : ObjectId("5e78cf29bbc41e36cc3caeb8"), "Information" : [ { "FirstName" : "John", "Age" : 21 }, { "FirstName" : "Sam", "Age" : 23 }, { "FirstName" : "John", "Age" : 24 }, { "FirstName" : "Carol", "Age" : 20 }, { "FirstName" : "Sam", "Age" : 22 } ] }

3단계: distinct()로 고유한 값 추출

이제 객체 배열 내부의 특정 필드에서 중복 없이 고유한 값만 가져오는 쿼리를 실행해 보겠습니다. 점 표기법(dot notation)을 사용하여 "Information.FirstName" 경로를 지정합니다.

> db.demo442.distinct("Information.FirstName");

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

[ "Carol", "John", "Sam" ]

결과 정리

원본 데이터에는 "John"과 "Sam"이 각각 두 번씩 중복되어 있었지만, distinct() 메서드를 사용하자 중복이 제거된 세 개의 고유한 이름만 배열로 반환된 것을 확인할 수 있습니다. 이처럼 distinct() 메서드와 점 표기법을 조합하면 객체 배열 내부 필드의 고유한 값을 손쉽게 조회할 수 있습니다.