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() 메서드와 점 표기법을 조합하면 객체 배열 내부 필드의 고유한 값을 손쉽게 조회할 수 있습니다.