MongoDB에서 특정 기간, 즉 두 날짜 사이에 저장된 문서(document)를 조회하려면 비교 연산자인 $gte(이상)와 $lt(미만)를 함께 사용하면 됩니다.
각 연산자의 의미는 다음과 같습니다.
- $gte (Greater Than or Equal): 지정한 값보다 크거나 같은 문서를 조회합니다.
- $lt (Less Than): 지정한 값보다 작은 문서를 조회합니다.
예제 컬렉션 생성하기
연산자의 동작을 이해하기 위해 먼저 order라는 이름의 컬렉션을 생성하고 샘플 문서를 삽입해 보겠습니다.
> db.order.insert({"OrderId":1,"OrderAddrees":"US","OrderDateTime":ISODate("2019-02-19")});
WriteResult({ "nInserted" : 1 })
> db.order.insert({"OrderId":2,"OrderAddrees":"UK","OrderDateTime":ISODate("2019-02-26")});
WriteResult({ "nInserted" : 1 })위 쿼리에서는 주문 ID, 배송 국가, 주문 일시를 담은 두 개의 문서를 삽입했습니다. 날짜 값은 ISODate() 함수를 사용해 BSON Date 타입으로 저장하는 것이 좋습니다. 문자열로 저장하면 날짜 범위 검색 시 정확한 비교가 어려울 수 있습니다.
저장된 전체 문서 확인하기
find() 메서드를 사용해 컬렉션의 모든 문서를 조회해 보겠습니다.
> db.order.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c6c072068174aae23f5ef57"),
"OrderId" : 1,
"OrderAddrees" : "US",
"OrderDateTime" : ISODate("2019-02-19T00:00:00Z")
}
{
"_id" : ObjectId("5c6c073568174aae23f5ef58"),
"OrderId" : 2,
"OrderAddrees" : "UK",
"OrderDateTime" : ISODate("2019-02-26T00:00:00Z")
}두 날짜 사이의 문서 조회하기
이제 핵심인 두 날짜 사이의 문서를 찾는 쿼리입니다. 아래 예제는 2019년 2월 10일 이상, 2019년 2월 21일 미만인 주문 문서를 조회합니다.
> db.order.find({"OrderDateTime":{ $gte:ISODate("2019-02-10"), $lt:ISODate("2019-02-21") }}).pretty();실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c6c072068174aae23f5ef57"),
"OrderId" : 1,
"OrderAddrees" : "US",
"OrderDateTime" : ISODate("2019-02-19T00:00:00Z")
}2019년 2월 26일에 생성된 두 번째 주문(UK)은 조회 범위를 벗어나므로 결과에 포함되지 않았습니다.
참고 사항
두 경계 값을 모두 포함하고 싶다면 $lt 대신 $lte(Less Than or Equal, 이하)를 사용하면 됩니다. 또한 자주 조회하는 날짜 필드에는 인덱스를 생성해 두면 범위 검색 성능을 크게 향상시킬 수 있습니다.