MongoDB에서 두 날짜 사이의 데이터를 검색하는 방법
MongoDB에서 특정 기간(두 날짜 사이)에 해당하는 문서를 조회하려면 비교 연산자인 $gte와 $lt를 함께 사용하면 됩니다.
$gte는 '크거나 같음' 조건, $lt는 '미만' 조건을 의미합니다. 아래 예제를 통해 실제 사용 방법을 단계별로 알아보겠습니다.
1단계: 샘플 컬렉션 생성하기
먼저 날짜 필드(EndDate)를 포함한 문서들로 이루어진 컬렉션을 생성합니다.
> db.demo524.insertOne({"EndDate":new ISODate("2020-01-19")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e8adbe5437efc8605595b63")
}
> db.demo524.insertOne({"EndDate":new ISODate("2020-01-20")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e8adbec437efc8605595b64")
}
> db.demo524.insertOne({"EndDate":new ISODate("2020-12-31")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e8adbf3437efc8605595b65")
}2단계: 저장된 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo524.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e8adbe5437efc8605595b63"), "EndDate" : ISODate("2020-01-19T00:00:00Z") }
{ "_id" : ObjectId("5e8adbec437efc8605595b64"), "EndDate" : ISODate("2020-01-20T00:00:00Z") }
{ "_id" : ObjectId("5e8adbf3437efc8605595b65"), "EndDate" : ISODate("2020-12-31T00:00:00Z") }3단계: 두 날짜 사이의 데이터를 조회하는 쿼리 작성하기
이제 $gte와 $lt를 활용해 2020년 1월 4일부터 1월 31일 사이에 해당하는 문서만 조회하는 쿼리를 작성해 보겠습니다.
> var first = new ISODate("2020-01-04");
> var last = new ISODate("2020-01-31");
> db.demo524.find({EndDate: {$gte: first, $lt: last}});쿼리를 실행하면 지정한 기간에 포함된 두 개의 문서만 반환됩니다.
{ "_id" : ObjectId("5e8adbe5437efc8605595b63"), "EndDate" : ISODate("2020-01-19T00:00:00Z") }
{ "_id" : ObjectId("5e8adbec437efc8605595b64"), "EndDate" : ISODate("2020-01-20T00:00:00Z") }참고: 경계 값 포함 여부 조절하기
$lt 대신 $lte를 사용하면 종료 날짜까지 포함해서 조회할 수 있으며, 시작 날짜를 제외하고 싶다면 $gt를 사용하면 됩니다.
- $gt: 초과 (시작 날짜 미포함)
- $gte: 이상 (시작 날짜 포함)
- $lt: 미만 (종료 날짜 미포함)
- $lte: 이하 (종료 날짜 포함)
이처럼 MongoDB에서는 ISODate 타입 필드에 비교 연산자를 적절히 조합하면 원하는 기간의 데이터를 손쉽게 조회할 수 있습니다.