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

MongoDB 컬렉션에서 최대값(Max) 요소 조회하기

MongoDB 컬렉션에서 특정 필드의 최대값을 가진 문서를 조회하려면 sort()와 limit() 메서드를 조합하면 됩니다. 핵심 아이디어는 해당 필드를 기준으로 내림차순(-1) 정렬한 뒤, 첫 번째 문서 하나만 가져오는 것입니다.

1. 샘플 컬렉션 생성

먼저 실습에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.

> db.demo669.insertOne({"Marks":76});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3133c04263e90dac943d9") }
> db.demo669.insertOne({"Marks":55});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3133f04263e90dac943da") }
> db.demo669.insertOne({"Marks":89});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3134204263e90dac943db") }
> db.demo669.insertOne({"Marks":88});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3134504263e90dac943dc") }
> db.demo669.insertOne({"Marks":79});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea3134e04263e90dac943dd") }

2. 전체 문서 확인하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

> db.demo669.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5ea3133c04263e90dac943d9"), "Marks" : 76 }
{ "_id" : ObjectId("5ea3133f04263e90dac943da"), "Marks" : 55 }
{ "_id" : ObjectId("5ea3134204263e90dac943db"), "Marks" : 89 }
{ "_id" : ObjectId("5ea3134504263e90dac943dc"), "Marks" : 88 }
{ "_id" : ObjectId("5ea3134e04263e90dac943dd"), "Marks" : 79 }

3. 최대값 요소 조회 쿼리

컬렉션에서 최대값을 가진 문서를 가져오는 쿼리는 다음과 같습니다.

> db.demo669.find().sort({"Marks":-1}).limit(1);

실행 결과는 아래와 같습니다.

{ "_id" : ObjectId("5ea3134204263e90dac943db"), "Marks" : 89 }

쿼리 동작 원리

sort({"Marks": -1})는 Marks 필드를 기준으로 내림차순(큰 값부터 작은 값 순서로) 정렬합니다. 이후 limit(1)이 정렬된 결과 중 첫 번째 문서만 반환하므로, 자연스럽게 최대값을 가진 문서가 선택됩니다.

반대로 최소값을 구하고 싶다면 정렬 방향만 오름차순(1)으로 변경하면 됩니다. 즉, db.demo669.find().sort({"Marks":1}).limit(1)처럼 작성하면 Marks가 가장 작은 문서를 얻을 수 있습니다.

참고: $max 연산자와의 차이

집계 파이프라인에서는 $max 연산자나 $group 단계를 활용해 최대값을 계산할 수도 있습니다. 하지만 단일 문서 조회가 목적이라면 sort + limit 조합이 인덱스를 활용할 수 있어 더욱 효율적입니다. 조회 대상 필드에 인덱스가 있다면 정렬 비용 없이 빠르게 결과를 반환받을 수 있습니다.