MongoDB에서 내부 배열 크기를 쿼리하는 방법
MongoDB에서 배열 필드에 저장된 요소의 개수, 즉 내부 배열의 크기를 확인하려면 $size 연산자를 사용하면 됩니다. 이 연산자는 주로 애그리게이션 파이프라인 안에서 $group, $first 등과 함께 활용됩니다.
기본 문법
db.internalArraySizeDemo.aggregate(
[
{
$group: {
_id: yourObjectIdValue,
anyFieldName: { $first: { $size: "$yourArrayName" } }
}
}
]
);
예제 컬렉션 생성하기
위 문법을 실제로 이해하기 위해 샘플 문서가 담긴 컬렉션을 먼저 만들어 보겠습니다. 다음은 문서를 삽입하는 쿼리입니다:
> db.internalArraySizeDemo.insertOne({"EmployeeName":"Mike","EmployeeTechnology":["Java Web Development","Python Web Development"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c6eff586fd07954a48906b2")
}
> db.internalArraySizeDemo.insertOne({"EmployeeName":"Sam","EmployeeTechnology":["C with Graphics","Game Development with C++ Language","MatLab"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c6effcd6fd07954a48906b3")
}
저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다:
> db.internalArraySizeDemo.find().pretty();
실행 결과는 다음과 같습니다:
{
"_id" : ObjectId("5c6eff586fd07954a48906b2"),
"EmployeeName" : "Mike",
"EmployeeTechnology" : [
"Java Web Development",
"Python Web Development"
]
}
{
"_id" : ObjectId("5c6effcd6fd07954a48906b3"),
"EmployeeName" : "Sam",
"EmployeeTechnology" : [
"C with Graphics",
"Game Development with C++ Language",
"MatLab"
]
}
$size 연산자로 배열 크기 구하기
이제 $size 연산자를 사용해 특정 문서의 내부 배열 크기를 조회해 보겠습니다:
> db.internalArraySizeDemo.aggregate(
... [
... {
... $group: {
... _id: ObjectId("5c6eff586fd07954a48906b2"),
... EmployeeTechnology_count: { $first: { $size: "$EmployeeTechnology" } }
... }
... }
... ]
... );
실행 결과를 보면 Mike 직원의 기술 배열에 요소가 2개 들어 있음을 확인할 수 있습니다:
{ "_id" : ObjectId("5c6eff586fd07954a48906b2"), "EmployeeTechnology_count" : 2 }
추가 팁: find()에서 배열 크기로 검색하기
참고로 애그리게이션이 아닌 일반 find() 쿼리에서도 $size를 사용할 수 있습니다. 다만 이 경우 지정한 크기와 정확히 일치하는 배열만 검색되며, 범위 비교(예: 3개 이상)는 불가능합니다. 범위 조건이 필요하다면 $expr 표현식이나 애그리게이션을 활용하는 것이 좋습니다.
db.internalArraySizeDemo.find({ "EmployeeTechnology": { $size: 2 } });