MongoDB에서 날짜 기준으로 최신 데이터 조회하기
데이터 레코드 중 가장 최신 데이터를 가져오려면 sort() 메서드에 정렬 값 -1을 사용하면 됩니다. 여러 개가 아닌 단 하나의 문서(document)만 필요한 경우에는 limit(1)을 함께 사용해 결과를 제한할 수 있습니다.
이번 글에서는 구매 날짜(PurchaseDate)가 저장된 예제 컬렉션을 만들고, 이를 기반으로 가장 최근 데이터를 조회하는 과정을 단계별로 살펴보겠습니다.
1. 예제 컬렉션 생성
먼저 demo521이라는 컬렉션에 날짜 정보를 포함한 문서들을 삽입합니다.
> db.demo521.insertOne({"PurchaseDate":new ISODate("2019-01-10"),"ProductName":"Product-1"});{
"acknowledged" : true, "insertedId" : ObjectId("5e89a1acb3fbf26334ef6117")
}
> db.demo521.insertOne({"PurchaseDate":new ISODate("2020-04-05"),"ProductName":"Product-10"});{
"acknowledged" : true, "insertedId" : ObjectId("5e89a1b9b3fbf26334ef6118")
}
> db.demo521.insertOne({"PurchaseDate":new ISODate("2010-05-08"),"ProductName":"Product-4"});{
"acknowledged" : true, "insertedId" : ObjectId("5e89a1c8b3fbf26334ef6119")
}
> db.demo521.insertOne({"PurchaseDate":new ISODate("2020-02-21"),"ProductName":"Product-3"});{
"acknowledged" : true, "insertedId" : ObjectId("5e89a1d7b3fbf26334ef611a")
}2. 저장된 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo521.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e89a1acb3fbf26334ef6117"), "PurchaseDate" : ISODate("2019-01-10T00:00:00Z"), "ProductName" : "Product-1" }
{ "_id" : ObjectId("5e89a1b9b3fbf26334ef6118"), "PurchaseDate" : ISODate("2020-04-05T00:00:00Z"), "ProductName" : "Product-10" }
{ "_id" : ObjectId("5e89a1c8b3fbf26334ef6119"), "PurchaseDate" : ISODate("2010-05-08T00:00:00Z"), "ProductName" : "Product-4" }
{ "_id" : ObjectId("5e89a1d7b3fbf26334ef611a"), "PurchaseDate" : ISODate("2020-02-21T00:00:00Z"), "ProductName" : "Product-3" }3. 날짜 기준 최신 데이터 조회 쿼리
이제 PurchaseDate 필드를 기준으로 내림차순(-1) 정렬하고, limit(1)로 결과 개수를 제한하여 가장 최신 데이터 한 건만 가져오는 쿼리를 실행해 보겠습니다.
> db.demo521.find().sort({"PurchaseDate": -1}).limit(1);실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e89a1b9b3fbf26334ef6118"), "PurchaseDate" : ISODate("2020-04-05T00:00:00Z"), "ProductName" : "Product-10" }정리
sort({필드명: -1})은 해당 필드를 내림차순으로 정렬하므로, 날짜 필드에 적용하면 가장 최근 날짜의 문서가 맨 앞에 위치하게 됩니다. 여기에 limit(1)을 결합하면 전체 컬렉션을 순회하지 않고도 최신 데이터 한 건만 효율적으로 조회할 수 있습니다. 참고로 오래된 데이터를 찾으려면 정렬 방향을 1(오름차순)로 변경하면 됩니다.