MongoDB에서 데이터를 조회할 때 결과를 원하는 순서대로 정렬하는 것은 매우 중요합니다. 이 글에서는 sort() 메서드를 사용해 컬렉션의 문서를 내림차순(큰 값 → 작은 값)으로 정렬하는 방법을 예제와 함께 자세히 알아보겠습니다.
MongoDB sort() 메서드의 기본 문법
MongoDB의 sort() 메서드는 필드 이름과 정렬 방향을 객체 형태로 전달받습니다.
- 오름차순 정렬: 필드 값에
1을 지정합니다. - 내림차순 정렬: 필드 값에
-1을 지정합니다.
오름차순 정렬의 기본 문법은 다음과 같습니다.
db.yourCollectionName.find().sort({yourField: 1});
내림차순으로 정렬하려면 값을 -1로 변경하면 됩니다.
db.yourCollectionName.find().sort({yourField: -1});
예제용 컬렉션 생성하기
개념을 쉽게 이해하기 위해 샘플 문서가 담긴 컬렉션을 먼저 만들어 보겠습니다. 아래 쿼리는 sortingDemo라는 컬렉션에 여러 개의 문서를 삽입합니다.
> db.sortingDemo.insertOne({"Value":100});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8f8e2ed3c9d04998abf006")
}
> db.sortingDemo.insertOne({"Value":1});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8f8e31d3c9d04998abf007")
}
> db.sortingDemo.insertOne({"Value":150});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8f8e34d3c9d04998abf008")
}
> db.sortingDemo.insertOne({"Value":250});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8f8e37d3c9d04998abf009")
}
> db.sortingDemo.insertOne({"Value":5});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8f8e3bd3c9d04998abf00a")
}
> db.sortingDemo.insertOne({"Value":199});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8f8e3ed3c9d04998abf00b")
}
> db.sortingDemo.insertOne({"Value":243});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8f8e44d3c9d04998abf00c")
}
> db.sortingDemo.insertOne({"Value":290});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8f8e48d3c9d04998abf00d")
}
저장된 모든 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다. pretty()를 함께 사용하면 결과를 읽기 좋은 형태로 출력해 줍니다.
> db.sortingDemo.find().pretty();
실행 결과는 다음과 같습니다. 문서들이 삽입된 순서대로 출력되는 것을 확인할 수 있습니다.
{ "_id" : ObjectId("5c8f8e2ed3c9d04998abf006"), "Value" : 100 }
{ "_id" : ObjectId("5c8f8e31d3c9d04998abf007"), "Value" : 1 }
{ "_id" : ObjectId("5c8f8e34d3c9d04998abf008"), "Value" : 150 }
{ "_id" : ObjectId("5c8f8e37d3c9d04998abf009"), "Value" : 250 }
{ "_id" : ObjectId("5c8f8e3bd3c9d04998abf00a"), "Value" : 5 }
{ "_id" : ObjectId("5c8f8e3ed3c9d04998abf00b"), "Value" : 199 }
{ "_id" : ObjectId("5c8f8e44d3c9d04998abf00c"), "Value" : 243 }
{ "_id" : ObjectId("5c8f8e48d3c9d04998abf00d"), "Value" : 290 }
내림차순으로 정렬하는 쿼리
이제 핵심인 내림차순 정렬입니다. find() 뒤에 sort({Value: -1})을 붙이면 Value 필드 기준으로 큰 값부터 작은 값 순서대로 결과가 반환됩니다.
> db.sortingDemo.find().sort({Value:-1});
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5c8f8e48d3c9d04998abf00d"), "Value" : 290 }
{ "_id" : ObjectId("5c8f8e37d3c9d04998abf009"), "Value" : 250 }
{ "_id" : ObjectId("5c8f8e44d3c9d04998abf00c"), "Value" : 243 }
{ "_id" : ObjectId("5c8f8e3ed3c9d04998abf00b"), "Value" : 199 }
{ "_id" : ObjectId("5c8f8e34d3c9d04998abf008"), "Value" : 150 }
{ "_id" : ObjectId("5c8f8e2ed3c9d04998abf006"), "Value" : 100 }
{ "_id" : ObjectId("5c8f8e3bd3c9d04998abf00a"), "Value" : 5 }
{ "_id" : ObjectId("5c8f8e31d3c9d04998abf007"), "Value" : 1 }
290부터 시작해서 1까지, Value 값이 내림차순으로 깔끔하게 정렬된 것을 확인할 수 있습니다.
정리 및 추가 팁
sort({필드명: 1})은 오름차순,sort({필드명: -1})은 내림차순 정렬입니다.- 여러 필드를 조합한 복합 정렬도 가능합니다. 예:
sort({A: -1, B: 1}) limit()과 함께 사용하면 상위 N개 문서만 가져올 수 있습니다. 예: 최고 점수 10개 조회 시find().sort({score: -1}).limit(10)- 자주 정렬하는 필드에는 인덱스를 생성하면 대량의 데이터에서도 정렬 성능이 크게 향상됩니다.
MongoDB의 내림차순 정렬은 단 한 줄의 -1 설정만으로 손쉽게 적용할 수 있습니다. 실무에서는 limit(), 인덱스와 함께 활용하면 훨씬 더 효율적인 쿼리를 작성할 수 있습니다.