MongoDB에서 배열에 포함된 요소의 개수를 확인해야 하는 경우가 종종 있습니다. 이럴 때는 집계 프레임워크(Aggregation Framework)와 $size 연산자를 함께 사용하면 간단하게 해결할 수 있습니다. 이 글에서는 실제 예제를 통해 배열 요소 수를 계산하는 방법을 단계별로 살펴보겠습니다.
1. 테스트용 컬렉션 생성
먼저 배열 필드를 가진 문서를 하나 삽입하여 테스트 컬렉션을 만들어 보겠습니다.
> db.countNumberOfElementsDemo.insertOne({"UserMessage":["Hi","Hello","Bye","Awesome"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cef8ec2ef71edecf6a1f6a1")
}2. 저장된 문서 확인
find() 메서드와 pretty() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 보기 좋게 출력할 수 있습니다.
> db.countNumberOfElementsDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5cef8ec2ef71edecf6a1f6a1"),
"UserMessage" : [
"Hi",
"Hello",
"Bye",
"Awesome"
]
}출력 결과를 보면 UserMessage 필드에 4개의 문자열이 배열 형태로 저장되어 있는 것을 확인할 수 있습니다.
3. $size 연산자로 배열 요소 수 계산하기
이제 집계 프레임워크의 $project 단계와 $size 연산자를 사용하여 배열의 요소 수를 계산해 보겠습니다.
> db.countNumberOfElementsDemo.aggregate({$project: { NumberOfElements: { $size:"$UserMessage" }}})실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5cef8ec2ef71edecf6a1f6a1"), "NumberOfElements" : 4 }NumberOfElements 필드에 값 4가 출력된 것을 볼 수 있습니다. 이는 UserMessage 배열에 정확히 4개의 요소가 있다는 의미입니다.
핵심 정리
$size연산자는 배열 필드의 요소 개수를 반환합니다.$project단계를 사용하면 원래 문서 대신 계산된 결과만 출력할 수 있습니다.- 여러 문서가 있는 컬렉션에도 동일한 방식으로 적용되며, 각 문서마다 배열 크기가 계산됩니다.
- 참고로
$size는 인자로 반드시 배열 표현식을 받아야 하며, 일반 숫자나 문자열을 전달하면 오류가 발생합니다.
이처럼 MongoDB의 집계 프레임워크를 활용하면 별도의 애플리케이션 로직 없이도 데이터베이스 차원에서 배열의 크기를 손쉽게 집계할 수 있습니다.