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

MongoDB에서 문서의 배열 항목 수를 계산하여 새 필드에 표시하는 방법

MongoDB에서 문서 내 배열의 항목 개수를 세고 그 결과를 새로운 필드로 표시하려면 $size 연산자를 사용하면 됩니다. $size는 집계(aggregation) 파이프라인의 $project 단계와 함께 활용되며, 각 문서의 배열 길이를 손쉽게 계산할 수 있게 해줍니다.

먼저 예제 컬렉션을 생성하고 문서를 삽입해 보겠습니다.

> db.demo703.insertOne({"ListOfSubject":["MySQL","MongoDB"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6ebaf551299a9f98c93b4")
}
> db.demo703.insertOne({"ListOfSubject":["Java"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6ebb5551299a9f98c93b5")
}
> db.demo703.insertOne({"ListOfSubject":["C","C++","Python"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6ebbf551299a9f98c93b6")
}

컬렉션의 모든 문서 조회하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

> db.demo703.find();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5ea6ebaf551299a9f98c93b4"), "ListOfSubject" : [ "MySQL", "MongoDB" ] }
{ "_id" : ObjectId("5ea6ebb5551299a9f98c93b5"), "ListOfSubject" : [ "Java" ] }
{ "_id" : ObjectId("5ea6ebbf551299a9f98c93b6"), "ListOfSubject" : [ "C", "C++", "Python" ] }

배열 항목 수를 계산하는 쿼리

이제 aggregate() 메서드와 $project, $size 연산자를 조합하여 각 문서의 배열 항목 개수를 새로운 필드로 출력하는 쿼리를 작성해 보겠습니다.

> db.demo703.aggregate({$project:{NumberOfItemsInEachArray:{$size:"$ListOfSubject"}}}).pretty();

실행 결과

쿼리 실행 결과, 각 문서마다 NumberOfItemsInEachArray라는 새로운 필드가 추가되고 해당 배열의 항목 수가 표시됩니다.

{
   "_id" : ObjectId("5ea6ebaf551299a9f98c93b4"),
   "NumberOfItemsInEachArray" : 2
}
{
   "_id" : ObjectId("5ea6ebb5551299a9f98c93b5"),
   "NumberOfItemsInEachArray" : 1
}
{
   "_id" : ObjectId("5ea6ebbf551299a9f98c93b6"),
   "NumberOfItemsInEachArray" : 3
}

정리

위 예제에서 확인할 수 있듯이, $size 연산자는 지정한 배열 필드의 요소 개수를 반환합니다. 첫 번째 문서는 2개, 두 번째 문서는 1개, 세 번째 문서는 3개의 과목을 포함하고 있으며, 이 값들이 각각 새로운 필드에 정확히 기록된 것을 볼 수 있습니다. $project 단계에서 원래 필드를 제외하고 새 필드만 지정했기 때문에 결과에는 _id와 계산된 항목 수만 출력됩니다. 만약 원본 배열도 함께 유지하고 싶다면 $project 내에 ListOfSubject: 1을 함께 명시하면 됩니다.