Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 내부 배열 크기를 쿼리하는 방법 ($size 연산자 완벽 가이드)

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 } });