MongoDB에서 배열에 포함된 값들 중 최소값과 최대값을 구하려면 집계 파이프라인에서 $min과 $max 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 배열 내 필드의 최소값과 최대값을 조회하는 방법을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성하기
먼저 문서를 담고 있는 컬렉션을 생성합니다. 아래 예제에서는 demo286 컬렉션에 details라는 배열 필드를 포함한 문서를 하나 삽입합니다.
> db.demo286.insertOne({"details":[{Value1:70,Value2:50},{Value1:30,Value2:36}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4ac743f49383b52759cbbc")
}2. 저장된 문서 확인하기
find() 메서드를 사용해 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.demo286.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5e4ac743f49383b52759cbbc"),
"details" : [
{
"Value1" : 70,
"Value2" : 50
},
{
"Value1" : 30,
"Value2" : 36
}
]
}3. $min과 $max로 최소값·최대값 조회하기
이제 aggregate() 메서드와 함께 $project 단계를 사용하여 배열 내 각 필드의 최소값과 최대값을 계산해 보겠습니다. $min은 details.Value1 필드의 최소값을, $max는 details.Value2 필드의 최대값을 반환합니다.
> db.demo286.aggregate([
{ "$project": {
"name": 1,
"MinValue1": { "$min": "$details.Value1" },
"MaxValue2": { "$max": "$details.Value2" }
}}
])4. 실행 결과
위 집계 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e4ac743f49383b52759cbbc"), "MinValue1" : 30, "MaxValue2" : 50 }결과를 보면 Value1 필드의 값 중 최소값인 30이 MinValue1로, Value2 필드의 값 중 최대값인 50이 MaxValue2로 정상적으로 추출된 것을 확인할 수 있습니다.
정리
MongoDB에서 배열 요소의 최소값과 최대값을 구하는 것은 매우 간단합니다. 핵심은 aggregate() 파이프라인 안에서 $project와 함께 $min, $max 연산자를 사용하고, 경로 표현식($details.Value1)으로 배열 내 특정 필드를 지정하는 것입니다. 이 방식은 문서가 많아도 서버 측에서 한 번에 계산되므로 효율적입니다.