MongoDB에서 배열에 포함된 요소의 개수를 확인하고 싶다면 $size 연산자를 사용하면 됩니다. $size는 집계 파이프라인(aggregate) 내에서 배열 필드의 길이를 손쉽게 계산해 주는 강력한 도구입니다.
$size 연산자 기본 문법
배열의 항목 수를 계산하는 기본 문법은 다음과 같습니다.
db.yourCollectionName.aggregate({$project:{anyFieldName:{$size:"$yourArrayName"}}}).pretty();여기서 anyFieldName은 계산된 배열 크기가 저장될 새로운 필드 이름이며, yourArrayName은 개수를 세고자 하는 배열 필드입니다.
예제 컬렉션 생성하기
문법을 실제로 이해하기 위해 학생 정보와 점수 배열을 담은 컬렉션을 만들어 보겠습니다.
> db.getSizeOfArray.insertOne({"StudentId":1,"StudentName":"Larry","StudentMarks":[87,34,56,77,89,90]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c6ebc536fd07954a4890680")
}
> db.getSizeOfArray.insertOne({"StudentId":2,"StudentName":"Sam","StudentMarks":[90,76,56]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c6ebc6b6fd07954a4890681")
}
> db.getSizeOfArray.insertOne({"StudentId":3,"StudentName":"Carol","StudentMarks":[90,76]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c6ebc7a6fd07954a4890682")
}저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.getSizeOfArray.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c6ebc536fd07954a4890680"),
"StudentId" : 1,
"StudentName" : "Larry",
"StudentMarks" : [
87,
34,
56,
77,
89,
90
]
}
{
"_id" : ObjectId("5c6ebc6b6fd07954a4890681"),
"StudentId" : 2,
"StudentName" : "Sam",
"StudentMarks" : [
90,
76,
56
]
}
{
"_id" : ObjectId("5c6ebc7a6fd07954a4890682"),
"StudentId" : 3,
"StudentName" : "Carol",
"StudentMarks" : [
90,
76
]
}$size로 배열 항목 수 계산하기
이제 aggregate와 $project 단계에 $size 연산자를 조합하여 각 문서의 배열 항목 수를 계산해 보겠습니다.
> db.getSizeOfArray.aggregate({$project:{NumberOfItemsInArray:{$size:"$StudentMarks"}}}).pretty();실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5c6ebc536fd07954a4890680"), "NumberOfItemsInArray" : 6 }
{ "_id" : ObjectId("5c6ebc6b6fd07954a4890681"), "NumberOfItemsInArray" : 3 }
{ "_id" : ObjectId("5c6ebc7a6fd07954a4890682"), "NumberOfItemsInArray" : 2 }결과 해석
- Larry의 StudentMarks 배열에는 6개의 점수가 있으므로 결과는 6
- Sam의 배열에는 3개의 점수가 있으므로 결과는 3
- Carol의 배열에는 2개의 점수가 있으므로 결과는 2
참고 사항
$size 연산자는 인자로 반드시 배열 표현식을 받아야 하며, 문자열이나 숫자가 전달되면 오류가 발생합니다. 또한 집계 파이프라인뿐 아니라 find() 쿼리의 프로젝션에서도 사용할 수 있어, 특정 조건(예: 배열 크기가 3 이상인 문서)으로 필터링할 때도 유용하게 활용됩니다.