MongoDB에서 최신 N개의 레코드를 정렬하여 가져오려면 sort() 메서드와 limit() 메서드를 함께 사용하면 됩니다. 이때 limit()에 원하는 레코드 개수를 지정하면, 정렬된 결과 중 상위 N개의 문서만 반환됩니다.
1. 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용해 demo454 컬렉션에 여러 개의 문서를 삽입해 보겠습니다.
> db.demo454.insertOne({"ClientName":"Chris"});{
"acknowledged" : true,
"insertedId" : ObjectId("5e7cce8cdbcb9adb296c95c0")
}
> db.demo454.insertOne({"ClientName":"John"});{
"acknowledged" : true,
"insertedId" : ObjectId("5e7cce95dbcb9adb296c95c1")
}
> db.demo454.insertOne({"ClientName":"Bob"});{
"acknowledged" : true,
"insertedId" : ObjectId("5e7cce9fdbcb9adb296c95c2")
}
> db.demo454.insertOne({"ClientName":"David"});{
"acknowledged" : true,
"insertedId" : ObjectId("5e7ccea6dbcb9adb296c95c3")
}
> db.demo454.insertOne({"ClientName":"Mike"});{
"acknowledged" : true,
"insertedId" : ObjectId("5e7cceafdbcb9adb296c95c4")
}2. 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.demo454.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e7cce8cdbcb9adb296c95c0"), "ClientName" : "Chris" }
{ "_id" : ObjectId("5e7cce95dbcb9adb296c95c1"), "ClientName" : "John" }
{ "_id" : ObjectId("5e7cce9fdbcb9adb296c95c2"), "ClientName" : "Bob" }
{ "_id" : ObjectId("5e7ccea6dbcb9adb296c95c3"), "ClientName" : "David" }
{ "_id" : ObjectId("5e7cceafdbcb9adb296c95c4"), "ClientName" : "Mike" }3. sort()와 limit()으로 최신 N개 레코드 조회하기
이제 sort()와 limit()을 조합하여 특정 필드를 기준으로 내림차순 정렬한 뒤, 상위 3개의 레코드만 가져오는 쿼리를 살펴보겠습니다. ClientName 필드를 -1(내림차순)로 정렬하고 limit(3)으로 결과 개수를 제한합니다.
> db.demo454.find().sort({ClientName:-1}).limit(3);실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e7cceafdbcb9adb296c95c4"), "ClientName" : "Mike" }
{ "_id" : ObjectId("5e7cce95dbcb9adb296c95c1"), "ClientName" : "John" }
{ "_id" : ObjectId("5e7ccea6dbcb9adb296c95c3"), "ClientName" : "David" }핵심 정리
sort({필드명: -1})은 해당 필드를 내림차순으로 정렬하고, limit(N)은 정렬된 결과 중 처음 N개의 문서만 반환합니다. 두 메서드를 체이닝(chaining) 방식으로 연결하면 MongoDB에서 손쉽게 '최신순 상위 N개' 데이터를 조회할 수 있습니다. 오름차순 정렬이 필요한 경우에는 -1 대신 1을 사용하면 됩니다.