MongoDB에서 문서 내 배열 필드에 포함된 요소의 개수를 세고 싶다면, 집계 파이프라인(aggregate)에서 $size 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 배열 요소 개수를 조회하는 방법을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성하기
먼저 데모용 컬렉션을 만들고 문서를 삽입합니다. 각 문서는 'Subject'라는 배열 필드를 가지고 있습니다.
> db.demo723.insertOne({"Subject":["MySQL","MongoDB"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eab094d43417811278f588a")
}
> db.demo723.insertOne({"Subject":["C"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eab095243417811278f588b")
}
> db.demo723.insertOne({"Subject":["C++","Java","Python"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eab095f43417811278f588c")
}2. 저장된 문서 확인하기
find() 메서드를 사용해 컬렉션의 모든 문서를 조회합니다.
> db.demo723.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5eab094d43417811278f588a"), "Subject" : [ "MySQL", "MongoDB" ] }
{ "_id" : ObjectId("5eab095243417811278f588b"), "Subject" : [ "C" ] }
{ "_id" : ObjectId("5eab095f43417811278f588c"), "Subject" : [ "C++", "Java", "Python" ] }3. $size로 배열 요소 개수 세기
이제 핵심 단계입니다. $project 스테이지와 함께 $size 연산자를 사용하면 각 문서의 배열 길이를 새로운 필드로 반환받을 수 있습니다.
> db.demo723.aggregate([
... { $project: { count: { $size: '$Subject' } } }
... ])실행 결과, 각 문서별로 Subject 배열에 담긴 요소의 개수가 'count' 필드로 출력됩니다.
{ "_id" : ObjectId("5eab094d43417811278f588a"), "count" : 2 }
{ "_id" : ObjectId("5eab095243417811278f588b"), "count" : 1 }
{ "_id" : ObjectId("5eab095f43417811278f588c"), "count" : 3 }정리
MongoDB에서 배열 필드의 요소 개수를 확인하는 가장 간단하고 효율적인 방법은 집계 파이프라인에서 $size 연산자를 사용하는 것입니다. 참고로 $size는 인자로 반드시 배열 표현식을 받아야 하며, 필드가 배열이 아닌 경우 에러가 발생할 수 있으므로 데이터 구조를 사전에 확인하는 것이 좋습니다.