MongoDB에서 현재 날짜보다 오래된 게시물을 찾으려면 $lte 연산자를 사용하면 됩니다. $lte는 'less than or equal'(작거나 같음)을 의미하는 비교 연산자로, 특정 날짜 이전에 저장된 문서를 조회할 때 매우 유용합니다.
1. 예제 컬렉션 생성 및 데이터 삽입
먼저 데모용 컬렉션을 만들고 DueDate 필드를 가진 문서들을 삽입해 보겠습니다.
> db.demo746.insertOne({DueDate:new Date("2020-01-10")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae67eca930c785c834e55b")
}
> db.demo746.insertOne({DueDate:new Date("2020-10-10")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae67eda930c785c834e55c")
}
> db.demo746.insertOne({DueDate:new Date("2020-03-05")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae67eea930c785c834e55d")
}
> db.demo746.insertOne({DueDate:new Date("2020-05-04")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eae67f1a930c785c834e55e")
}2. find() 메서드로 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo746.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5eae67eca930c785c834e55b"), "DueDate" : ISODate("2020-01-10T00:00:00Z") }
{ "_id" : ObjectId("5eae67eda930c785c834e55c"), "DueDate" : ISODate("2020-10-10T00:00:00Z") }
{ "_id" : ObjectId("5eae67eea930c785c834e55d"), "DueDate" : ISODate("2020-03-05T00:00:00Z") }
{ "_id" : ObjectId("5eae67f1a930c785c834e55e"), "DueDate" : ISODate("2020-05-04T00:00:00Z") }3. 현재 날짜보다 오래된 게시물 조회 쿼리
이제 핵심 부분입니다. new Date()로 현재 시각을 가져온 뒤, $lte 연산자와 비교하여 마감일(DueDate)이 현재 날짜보다 이전인 문서만 조회합니다.
> db.demo746.find({DueDate:{$lte:new Date()}});쿼리 실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5eae67eca930c785c834e55b"), "DueDate" : ISODate("2020-01-10T00:00:00Z") }
{ "_id" : ObjectId("5eae67eea930c785c834e55d"), "DueDate" : ISODate("2020-03-05T00:00:00Z") }결과 분석
전체 4개의 문서 중 마감일이 2020-01-10과 2020-03-05인 두 개의 문서만 반환되었습니다. 이는 해당 문서들의 DueDate 값이 쿼리 실행 시점의 현재 날짜보다 이전이기 때문입니다.
참고로, $lte는 현재 날짜와 정확히 일치하는 문서도 포함하여 조회합니다. 만약 현재 날짜보다 '엄격하게 이전'인 문서만 찾고 싶다면 $lt(미만) 연산자를 대신 사용하는 것이 좋습니다. 또한 자주 사용하는 날짜 필드에는 인덱스를 생성해 두면 대량의 데이터에서도 조회 성능을 크게 향상시킬 수 있습니다.