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

MongoDB에서 오늘 이전에 만료된 문서 조회하는 방법 ($lte 연산자 활용)

MongoDB에서 오늘 이전에 만료된 문서 조회하기

MongoDB에서 특정 날짜가 지나 만료된 문서를 조회하려면 $lte 연산자Date() 함수를 함께 사용하면 됩니다. $lte는 'less than or equal(작거나 같음)'을 의미하는 비교 연산자로, 현재 시간보다 이전이거나 같은 날짜 값을 가진 문서만 필터링할 수 있습니다.

아래에서 예제를 통해 단계별로 살펴보겠습니다. 이 글에서는 현재 날짜를 2019-05-11로 가정합니다.

1. 샘플 컬렉션 생성 및 문서 삽입

먼저 예제에 사용할 컬렉션을 생성하고 여러 개의 문서를 삽입합니다. 각 문서에는 서로 다른 날짜의 ArrivalDate 필드가 포함되어 있습니다.

> db.getDocumentsExpiredDemo.insertOne({"ArrivalDate":new ISODate("2019-05-11")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd563b17924bb85b3f4893b")
}
> db.getDocumentsExpiredDemo.insertOne({"ArrivalDate":new ISODate("2019-01-01")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd563bf7924bb85b3f4893c")
}
> db.getDocumentsExpiredDemo.insertOne({"ArrivalDate":new ISODate("2019-05-10")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd563ca7924bb85b3f4893d")
}
> db.getDocumentsExpiredDemo.insertOne({"ArrivalDate":new ISODate("2019-02-01")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd563e77924bb85b3f4893e")
}

2. 전체 문서 확인하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

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

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

{
   "_id" : ObjectId("5cd563b17924bb85b3f4893b"),
   "ArrivalDate" : ISODate("2019-05-11T00:00:00Z")
}
{
   "_id" : ObjectId("5cd563bf7924bb85b3f4893c"),
   "ArrivalDate" : ISODate("2019-01-01T00:00:00Z")
}
{
   "_id" : ObjectId("5cd563ca7924bb85b3f4893d"),
   "ArrivalDate" : ISODate("2019-05-10T00:00:00Z")
}
{
   "_id" : ObjectId("5cd563e77924bb85b3f4893e"),
   "ArrivalDate" : ISODate("2019-02-01T00:00:00Z")
}

3. 오늘 이전에 만료된 문서 조회하기

이제 핵심 쿼리입니다. ArrivalDate 필드의 값이 현재 시간(new Date())보다 작거나 같은 문서를 찾으면, 오늘 이전에 만료된 문서만 정확히 걸러낼 수 있습니다.

> db.getDocumentsExpiredDemo.find({ "ArrivalDate": { $lte : new Date()}});

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

{ "_id" : ObjectId("5cd563bf7924bb85b3f4893c"), "ArrivalDate" : ISODate("2019-01-01T00:00:00Z") }
{ "_id" : ObjectId("5cd563ca7924bb85b3f4893d"), "ArrivalDate" : ISODate("2019-05-10T00:00:00Z") }
{ "_id" : ObjectId("5cd563e77924bb85b3f4893e"), "ArrivalDate" : ISODate("2019-02-01T00:00:00Z") }

결과를 보면 2019-05-11(오늘) 이전 날짜를 가진 세 개의 문서만 반환된 것을 확인할 수 있습니다. 오늘 날짜(2019-05-11)에 해당하는 문서는 $lte 조건에 포함되지 않았는데, 이는 시간까지 고려한 비교가 이루어지기 때문입니다. 만약 당일 자정 기준으로 포함하고 싶다면 날짜 범위를 직접 지정하는 방식을 사용하는 것이 좋습니다.

마무리

$lte 연산자와 new Date()를 조합하면 만료된 문서를 간단하게 필터링할 수 있습니다. 참고로 실무 환경에서는 TTL(Time-To-Live) 인덱스를 활용하면 만료된 문서를 자동으로 삭제할 수 있으므로, 주기적인 데이터 정리가 필요하다면 함께 검토해 보시기 바랍니다.