MongoDB distinct() 메서드로 고유한 값 추출하기
컬렉션에 저장된 문서들에서 특정 필드의 중복을 제거한 고유한(distinct) 값만 추출하고 싶다면 MongoDB의 distinct() 메서드를 사용하면 됩니다. 이번 글에서는 예제 컬렉션을 직접 만들어 보고, distinct()를 활용해 고유한 FirstName 값을 조회하는 전체 과정을 단계별로 살펴보겠습니다.
1단계: 샘플 컬렉션 생성
먼저 insertOne() 메서드로 문서를 하나씩 삽입하여 데모용 컬렉션을 생성합니다.
> db.demo303.insertOne({FirstName:"Chris",LastName:"Brown"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4ea0f6f8647eb59e56202f")
}
> db.demo303.insertOne({FirstName:"John",LastName:"Doe"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4ea104f8647eb59e562030")
}
> db.demo303.insertOne({FirstName:"Chris",LastName:"Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4ea10df8647eb59e562031")
}
> db.demo303.insertOne({FirstName:"John",LastName:"Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4ea121f8647eb59e562032")
}
> db.demo303.insertOne({FirstName:"David",LastName:"Miller"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4ea136f8647eb59e562033")
}총 5개의 문서가 삽입되었으며, FirstName 필드에는 "Chris"와 "John"이 각각 두 번씩 중복되어 들어간 것을 볼 수 있습니다.
2단계: find()로 전체 문서 확인
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo303.find().pretty();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5e4ea0f6f8647eb59e56202f"),
"FirstName" : "Chris",
"LastName" : "Brown"
}
{
"_id" : ObjectId("5e4ea104f8647eb59e562030"),
"FirstName" : "John",
"LastName" : "Doe"
}
{
"_id" : ObjectId("5e4ea10df8647eb59e562031"),
"FirstName" : "Chris",
"LastName" : "Smith"
}
{
"_id" : ObjectId("5e4ea121f8647eb59e562032"),
"FirstName" : "John",
"LastName" : "Smith"
}
{
"_id" : ObjectId("5e4ea136f8647eb59e562033"),
"FirstName" : "David",
"LastName" : "Miller"
}3단계: distinct()로 고유한 FirstName 값 조회
이제 FirstName 필드의 중복을 제거한 고유한 값만 가져오는 쿼리입니다. distinct() 메서드에 필드 이름을 인자로 전달하기만 하면 됩니다.
> db.demo303.distinct("FirstName");실행 결과는 다음과 같습니다.
[ "Chris", "John", "David" ]
결과 분석
전체 5개 문서 중 FirstName이 중복되던 "Chris"와 "John"이 각각 한 번씩만 포함되어, 최종적으로 3개의 고유한 값이 배열 형태로 반환되었습니다. 이처럼 distinct() 메서드를 사용하면 별도의 집계 파이프라인 없이도 간단하게 특정 필드의 유니크한 값 목록을 손쉽게 얻을 수 있습니다.