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

MongoDB에서 타임스탬프 기준 내림차순으로 정렬하는 방법

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()를 조합하는 것만으로도 간단하게 원하는 순서로 데이터를 조회할 수 있습니다. 게시글 목록, 로그 조회 등 최신 항목을 우선적으로 보여줘야 하는 서비스에서 특히 유용하게 활용됩니다.