MongoDB에서 날짜나 시간 데이터를 다룰 때 가장 많이 사용되는 작업 중 하나가 타임스탬프(timestamp)를 기준으로 문서를 정렬하는 것입니다. 최신 데이터부터 오래된 데이터 순으로 조회하려면 sort() 메서드에 -1(내림차순) 옵션을 지정하면 됩니다.
1. 샘플 컬렉션 생성하기
먼저 실습에 사용할 컬렉션을 만들고 타임스탬프 필드를 가진 문서들을 삽입해 보겠습니다. insertOne() 메서드와 ISODate()를 활용합니다.
> db.demo737.insertOne({"timestamp" : new ISODate("2020-04-01")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead682157bb72a10bcf065c")
}
> db.demo737.insertOne({"timestamp" : new ISODate("2020-10-31")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead682757bb72a10bcf065d")
}
> db.demo737.insertOne({"timestamp" : new ISODate("2020-05-02")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead682a57bb72a10bcf065e")
}2. 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.demo737.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다. 문서들이 삽입된 순서대로 표시되는 것을 확인할 수 있습니다.
{ "_id" : ObjectId("5ead682157bb72a10bcf065c"), "timestamp" : ISODate("2020-04-01T00:00:00Z") }
{ "_id" : ObjectId("5ead682757bb72a10bcf065d"), "timestamp" : ISODate("2020-10-31T00:00:00Z") }
{ "_id" : ObjectId("5ead682a57bb72a10bcf065e"), "timestamp" : ISODate("2020-05-02T00:00:00Z") }3. 타임스탬프 기준 내림차순 정렬하기
이제 핵심인 정렬 쿼리입니다. sort() 메서드에 정렬 기준이 될 필드명과 -1 값을 전달하면 해당 필드를 기준으로 내림차순(최신순) 정렬이 수행됩니다.
> db.demo737.find().sort({"timestamp":-1});실행 결과는 다음과 같습니다. 가장 최근 날짜인 2020년 10월 31일부터 오래된 순서대로, 즉 4월 1일까지 정렬된 것을 볼 수 있습니다.
{ "_id" : ObjectId("5ead682757bb72a10bcf065d"), "timestamp" : ISODate("2020-10-31T00:00:00Z") }
{ "_id" : ObjectId("5ead682a57bb72a10bcf065e"), "timestamp" : ISODate("2020-05-02T00:00:00Z") }
{ "_id" : ObjectId("5ead682157bb72a10bcf065c"), "timestamp" : ISODate("2020-04-01T00:00:00Z") }정리 및 참고 사항
sort({"timestamp": -1})→ 내림차순(최신 데이터 먼저) 정렬sort({"timestamp": 1})→ 오름차순(오래된 데이터 먼저) 정렬- 정렬 대상 필드에 인덱스를 생성해 두면 대량의 데이터에서도 정렬 성능이 크게 향상됩니다. 예:
db.demo737.createIndex({"timestamp": -1})
이처럼 MongoDB에서는 find()와 sort()를 조합하는 것만으로도 간단하게 원하는 순서로 데이터를 조회할 수 있습니다. 게시글 목록, 로그 조회 등 최신 항목을 우선적으로 보여줘야 하는 서비스에서 특히 유용하게 활용됩니다.