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

MongoDB에서 지난주에 생성된 객체를 조회하는 방법

MongoDB에서 지난주 데이터 조회하기

MongoDB에서 지난주(최근 7일) 동안 생성되거나 저장된 객체를 찾으려면 Date() 함수와 $gte(greater than or equal, 이상) 연산자를 함께 사용하면 됩니다. 이 방법을 사용하면 현재 시점으로부터 7일 전 이후의 날짜를 가진 문서만 손쉽게 필터링할 수 있습니다.

현재 시스템 날짜 확인하기

먼저 현재 시스템의 날짜를 확인해 보겠습니다. 예제 기준 시각은 다음과 같습니다.

> new Date();
ISODate("2019-05-14T08:32:42.773Z")

예제 컬렉션 생성하기

테스트를 위해 배송일(ShippingDate) 정보를 가진 문서들을 담은 컬렉션을 먼저 생성하겠습니다.

> db.findObectInLastWeekDemo.insertOne({"ShippingDate":new ISODate("2019-05-01")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cda7dc4bf3115999ed511e0")
}
> db.findObectInLastWeekDemo.insertOne({"ShippingDate":new ISODate("2019-05-02")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cda7dc4bf3115999ed511e1")
}
> db.findObectInLastWeekDemo.insertOne({"ShippingDate":new ISODate("2019-05-08")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cda7dc4bf3115999ed511e2")
}
> db.findObectInLastWeekDemo.insertOne({"ShippingDate":new ISODate("2019-05-07")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cda7dc4bf3115999ed511e3")
}
> db.findObectInLastWeekDemo.insertOne({"ShippingDate":new ISODate("2019-05-09")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cda7dc4bf3115999ed511e4")
}
> db.findObectInLastWeekDemo.insertOne({"ShippingDate":new ISODate("2019-04-26")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cda7dc4bf3115999ed511e5")
}

저장된 전체 문서 확인하기

find() 메서드를 사용해 컬렉션의 모든 문서를 출력해 보겠습니다.

> db.findObectInLastWeekDemo.find().pretty();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5cda7dc4bf3115999ed511e0"), "ShippingDate" : ISODate("2019-05-01T00:00:00Z") }
{ "_id" : ObjectId("5cda7dc4bf3115999ed511e1"), "ShippingDate" : ISODate("2019-05-02T00:00:00Z") }
{ "_id" : ObjectId("5cda7dc4bf3115999ed511e2"), "ShippingDate" : ISODate("2019-05-08T00:00:00Z") }
{ "_id" : ObjectId("5cda7dc4bf3115999ed511e3"), "ShippingDate" : ISODate("2019-05-07T00:00:00Z") }
{ "_id" : ObjectId("5cda7dc4bf3115999ed511e4"), "ShippingDate" : ISODate("2019-05-09T00:00:00Z") }
{ "_id" : ObjectId("5cda7dc4bf3115999ed511e5"), "ShippingDate" : ISODate("2019-04-26T00:00:00Z") }

지난주에 생성된 객체 찾는 핵심 쿼리

이제 본론입니다. MongoDB에서 지난주(최근 7일 이내)에 생성된 객체를 찾는 쿼리는 다음과 같습니다.

> db.findObectInLastWeekDemo.find({ShippingDate:{$gte: new Date(new Date() - 7 * 60 * 60 * 24 * 1000)}});

이 쿼리의 원리는 간단합니다. 현재 시간에서 밀리초 단위로 계산한 7일치(7 * 60 * 60 * 24 * 1000)를 빼서 7일 전 시점을 구하고, 그 시점 이후($gte)의 날짜를 가진 문서만 조회하는 것입니다.

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5cda7dc4bf3115999ed511e2"), "ShippingDate" : ISODate("2019-05-08T00:00:00Z") }
{ "_id" : ObjectId("5cda7dc4bf3115999ed511e4"), "ShippingDate" : ISODate("2019-05-09T00:00:00Z") }

기준일인 2019년 5월 14일로부터 7일 이내인 5월 8일과 5월 9일의 문서만 정확히 조회된 것을 확인할 수 있습니다. 그보다 오래된 5월 1일, 5월 2일, 4월 26일의 문서는 결과에서 제외됩니다.

참고: 특정 기간 범위로 조회하기

$gte 연산자와 함께 $lte(이하) 또는 $lt(미만) 연산자를 조합하면 시작일과 종료일을 모두 지정하여 더 정밀한 기간 검색도 가능합니다. 예를 들어 지난주 전체가 아닌 특정 일주일 구간의 데이터를 조회할 때 유용합니다.