MongoDB에서 배열 필드에 저장된 값들 중 중복을 제거한 고유한(distinct) 값의 개수를 구하고 싶다면 distinct() 메서드와 length 속성을 함께 사용하면 됩니다. 이번 글에서는 예제 컬렉션을 만들고, 배열 내 고유 값의 총 개수를 조회하는 과정을 단계별로 살펴보겠습니다.
1. 예제 컬렉션 생성하기
먼저 insertOne() 메서드를 사용해 문서를 담은 컬렉션을 생성합니다.
> db.demo36.insertOne({"Names":["Chris","Bob"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e17643bcfb11e5c34d898d4")
}
> db.demo36.insertOne({"Names":["Mike","Sam","Carol"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e176449cfb11e5c34d898d5")
}
> db.demo36.insertOne({"Names":["Chris","Bob","David"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e17645bcfb11e5c34d898d6")
}2. 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo36.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e17643bcfb11e5c34d898d4"), "Names" : [ "Chris", "Bob" ] }
{ "_id" : ObjectId("5e176449cfb11e5c34d898d5"), "Names" : [ "Mike", "Sam", "Carol" ] }
{ "_id" : ObjectId("5e17645bcfb11e5c34d898d6"), "Names" : [ "Chris", "Bob", "David" ] }3. 고유 값의 개수(length) 조회하기
이제 distinct() 메서드로 'Names' 필드의 고유 값을 추출한 뒤, length 속성으로 그 개수를 확인합니다.
> db.demo36.distinct('Names').length;실행 결과는 다음과 같습니다.
6
결과 해석
세 문서의 'Names' 배열에는 Chris, Bob, Mike, Sam, Carol, David이라는 이름이 들어 있습니다. 여기서 Chris와 Bob은 두 번째 문서에서도 반복되어 나타나지만, distinct()가 중복을 자동으로 제거해 주기 때문에 최종적으로 6개의 고유한 값만 남게 됩니다.
이처럼 db.컬렉션명.distinct('필드명').length 패턴을 활용하면, 배열 필드에 존재하는 서로 다른 값이 총 몇 개인지 아주 간단하게 파악할 수 있습니다.