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

MongoDB에서 배열의 최소값과 최대값 구하는 방법 ($min, $max 연산자 활용)

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 단계를 사용하여 배열 내 각 필드의 최소값과 최대값을 계산해 보겠습니다. $mindetails.Value1 필드의 최소값을, $maxdetails.Value2 필드의 최대값을 반환합니다.

> db.demo286.aggregate([
    { "$project": {
        "name": 1,
        "MinValue1": { "$min": "$details.Value1" },
        "MaxValue2": { "$max": "$details.Value2" }
    }}
])

4. 실행 결과

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

{ "_id" : ObjectId("5e4ac743f49383b52759cbbc"), "MinValue1" : 30, "MaxValue2" : 50 }

결과를 보면 Value1 필드의 값 중 최소값인 30MinValue1로, Value2 필드의 값 중 최대값인 50MaxValue2로 정상적으로 추출된 것을 확인할 수 있습니다.

정리

MongoDB에서 배열 요소의 최소값과 최대값을 구하는 것은 매우 간단합니다. 핵심은 aggregate() 파이프라인 안에서 $project와 함께 $min, $max 연산자를 사용하고, 경로 표현식($details.Value1)으로 배열 내 특정 필드를 지정하는 것입니다. 이 방식은 문서가 많아도 서버 측에서 한 번에 계산되므로 효율적입니다.