MongoDB에서 최댓값과 최솟값 구하기
MongoDB에서 컬렉션에 저장된 특정 필드의 최댓값과 최솟값을 조회하려면 애그리게이션(aggregate) 프레임워크와 함께 $max, $min 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 확인해 보겠습니다.
1. 샘플 데이터로 컬렉션 생성하기
먼저 insertOne() 메서드를 사용해 여러 개의 문서를 삽입하여 테스트용 컬렉션을 만들어 보겠습니다.
> db.maxAndMinDemo.insertOne({"Value":98});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd698a357806ebf1256f129")
}
> db.maxAndMinDemo.insertOne({"Value":97});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd698af57806ebf1256f12a")
}
> db.maxAndMinDemo.insertOne({"Value":69});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd698b357806ebf1256f12b")
}
> db.maxAndMinDemo.insertOne({"Value":96});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd698b657806ebf1256f12c")
}
> db.maxAndMinDemo.insertOne({"Value":99});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd698b957806ebf1256f12d")
}위 명령을 실행하면 98, 97, 69, 96, 99라는 다섯 개의 숫자 값이 Value 필드에 차례로 저장됩니다.
2. 저장된 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 있는 모든 문서를 조회할 수 있습니다.
> db.maxAndMinDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5cd698a357806ebf1256f129"), "Value" : 98 }
{ "_id" : ObjectId("5cd698af57806ebf1256f12a"), "Value" : 97 }
{ "_id" : ObjectId("5cd698b357806ebf1256f12b"), "Value" : 69 }
{ "_id" : ObjectId("5cd698b657806ebf1256f12c"), "Value" : 96 }
{ "_id" : ObjectId("5cd698b957806ebf1256f12d"), "Value" : 99 }3. $max와 $min으로 최댓값·최솟값 한 번에 조회하기
이제 핵심인 애그리게이션 쿼리입니다. $group 스테이지에서 _id를 null로 지정하면 컬렉션의 모든 문서가 하나의 그룹으로 묶이며, 이 상태에서 $max와 $min 연산자를 적용해 최댓값과 최솟값을 동시에 계산할 수 있습니다.
> db.maxAndMinDemo.aggregate([
{ "$group": {
"_id": null,
"MaximumValue": { "$max": "$Value" },
"MinimumValue": { "$min": "$Value" }
}}
]);실행 결과는 다음과 같습니다.
{ "_id" : null, "MaximumValue" : 99, "MinimumValue" : 69 }정리
결과를 보면 MaximumValue는 99, MinimumValue는 69로 정확하게 계산된 것을 확인할 수 있습니다. 이처럼 MongoDB에서는 별도의 복잡한 로직 없이 aggregate() 파이프라인 안에서 $group과 함께 $max, $min 연산자만 조합하면 손쉽게 최댓값과 최솟값을 구할 수 있습니다. 참고로 _id: null 대신 특정 필드를 기준으로 그룹화하면, 카테고리별 최댓값·최솟값 같은 통계도 간단히 집계할 수 있습니다.