MongoDB에서 컬렉션 내 가장 높은 점수(Marks)를 가진 문서를 조회하려면 sort() 메서드를 내림차순으로 정렬한 뒤 limit(1)을 함께 사용하면 됩니다. 이 방식은 전체 데이터를 정렬한 후 상위 한 개의 문서만 반환하므로, 최댓값을 구하는 가장 간단하고 효율적인 방법 중 하나입니다.
1. 샘플 컬렉션 생성하기
먼저 실습에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.
> db.demo241.insertOne({"Marks":67});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e441f729af932883c61ea40")
}
> db.demo241.insertOne({"Marks":89});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e441f769af932883c61ea41")
}
> db.demo241.insertOne({"Marks":78});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e441f789af932883c61ea42")
}2. 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo241.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e441f729af932883c61ea40"), "Marks" : 67 }
{ "_id" : ObjectId("5e441f769af932883c61ea41"), "Marks" : 89 }
{ "_id" : ObjectId("5e441f789af932883c61ea42"), "Marks" : 78 }3. 최대 점수 레코드 조회하기
이제 핵심인 최대 점수를 가진 문서를 조회하는 쿼리입니다. sort()에 -1(내림차순)을 지정하여 점수가 높은 순서대로 정렬한 후, limit(1)로 첫 번째 문서만 가져옵니다.
> db.demo241.find().sort({Marks:-1}).limit(1);실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e441f769af932883c61ea41"), "Marks" : 89 }동작 원리 정리
이 쿼리가 동작하는 방식은 다음과 같습니다.
sort({Marks:-1}) – Marks 필드를 기준으로 내림차순(큰 값부터) 정렬합니다.
limit(1) – 정렬된 결과 중 첫 번째 문서 하나만 반환합니다.
따라서 정렬 후 첫 번째 위치하는 문서가 곧 최댓값을 가진 레코드입니다. 반대로 최솟값을 구하고 싶다면 sort()에 1(오름차순)을 지정하고 limit(1)을 적용하면 됩니다. 또한 인덱스가 해당 필드에 설정되어 있다면 정렬 연산이 최적화되어 대용량 데이터에서도 빠른 성능을 기대할 수 있습니다.