MongoDB에서 특정 필드에 저장된 모든 값을 한 번에 확인하고 싶다면 distinct() 메서드를 사용하면 됩니다. 이 메서드는 지정한 필드의 중복을 제거한 고유 값들을 배열 형태로 반환해 주기 때문에, 필드 전체의 값 분포를 빠르게 파악할 때 매우 유용합니다.
distinct() 기본 문법
db.yourCollectionName.distinct("yourFieldName");예제 컬렉션 생성하기
문법을 제대로 이해하기 위해 먼저 샘플 데이터가 담긴 컬렉션을 만들어 보겠습니다. 아래 쿼리는 listAllValuesOfCeratinFieldsDemo라는 컬렉션에 문서를 하나씩 삽입합니다.
> db.listAllValuesOfCeratinFieldsDemo.insertOne({"ListOfValues":[10,20,30]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8fc89ed3c9d04998abf011")
}
> db.listAllValuesOfCeratinFieldsDemo.insertOne({"ListOfValues":[40,50,60]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8fc8abd3c9d04998abf012")
}
> db.listAllValuesOfCeratinFieldsDemo.insertOne({"ListOfValues":[10,20,30]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8fc8d7d3c9d04998abf013")
}
> db.listAllValuesOfCeratinFieldsDemo.insertOne({"ListOfValues":[40,50,70]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8fc8e2d3c9d04998abf014")
}총 4개의 문서가 삽입되었으며, 각 문서는 ListOfValues라는 이름의 배열 필드를 가지고 있습니다.
저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.listAllValuesOfCeratinFieldsDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5c8fc89ed3c9d04998abf011"),
"ListOfValues" : [
10,
20,
30
]
}
{
"_id" : ObjectId("5c8fc8abd3c9d04998abf012"),
"ListOfValues" : [
40,
50,
60
]
}
{
"_id" : ObjectId("5c8fc8d7d3c9d04998abf013"),
"ListOfValues" : [
10,
20,
30
]
}
{
"_id" : ObjectId("5c8fc8e2d3c9d04998abf014"),
"ListOfValues" : [
40,
50,
70
]
}distinct()로 특정 필드의 모든 값 조회하기
이제 distinct() 메서드를 사용해 ListOfValues 필드의 모든 값을 조회해 보겠습니다.
> db.listAllValuesOfCeratinFieldsDemo.distinct("ListOfValues");실행 결과는 다음과 같습니다.
[ 10, 20, 30, 40, 50, 60, 70 ]
출력 결과를 보면 알 수 있듯이, distinct()는 여러 문서의 배열 필드에 흩어져 있던 값들을 하나의 배열로 합쳐주고, 중복된 값(예: 두 번째 문서와 세 번째 문서에 공통으로 있는 10, 20, 30)은 자동으로 제거합니다. 덕분에 해당 필드에 어떤 고유한 값들이 존재하는지 한눈에 파악할 수 있습니다.