MongoDB에서 특정 날짜와 일치하는 문서를 조회하려면 $match 연산자를 aggregate() 집계 파이프라인과 함께 사용하면 됩니다. 아래 예제를 통해 날짜 기반 필터링 과정을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드로 배송 날짜(ShippingDate) 필드가 포함된 문서들을 demo491 컬렉션에 차례대로 삽입합니다.
> db.demo491.insertOne({"ShippingDate":new ISODate("2020-01-10")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e849a09b0f3fa88e22790be")
}
> db.demo491.insertOne({"ShippingDate":new ISODate("2020-02-21")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e849a0eb0f3fa88e22790bf")
}
> db.demo491.insertOne({"ShippingDate":new ISODate("2020-03-23")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e849a1db0f3fa88e22790c0")
}
> db.demo491.insertOne({"ShippingDate":new ISODate()});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e849a28b0f3fa88e22790c1")
}
2. 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo491.find();
위 쿼리는 다음과 같은 결과를 출력합니다.
{ "_id" : ObjectId("5e849a09b0f3fa88e22790be"), "ShippingDate" : ISODate("2020-01-10T00:00:00Z") }
{ "_id" : ObjectId("5e849a0eb0f3fa88e22790bf"), "ShippingDate" : ISODate("2020-02-21T00:00:00Z") }
{ "_id" : ObjectId("5e849a1db0f3fa88e22790c0"), "ShippingDate" : ISODate("2020-03-23T00:00:00Z") }
{ "_id" : ObjectId("5e849a28b0f3fa88e22790c1"), "ShippingDate" : ISODate("2020-04-01T13:42:00.090Z") }
3. $match로 날짜 조건 필터링하기
다음은 aggregate() 파이프라인 안에서 $match를 사용해 특정 날짜와 일치하는 문서만 조회하는 쿼리입니다. 여기서는 비교 연산자 $gte(이상)를 활용해 2020-02-24T18:10:11.000Z 이후에 배송된 문서만 걸러냅니다.
> db.demo491.aggregate([
... {
... '$match' : { 'ShippingDate' : { '$gte' : ISODate('2020-02-24T18:10:11.000Z') } }
... }
... ]);
쿼리 실행 결과는 다음과 같습니다. 지정한 시점보다 이후인 두 개의 문서만 반환되는 것을 확인할 수 있습니다.
{ "_id" : ObjectId("5e849a1db0f3fa88e22790c0"), "ShippingDate" : ISODate("2020-03-23T00:00:00Z") }
{ "_id" : ObjectId("5e849a28b0f3fa88e22790c1"), "ShippingDate" : ISODate("2020-04-01T13:42:00.090Z") }
핵심 정리
MongoDB에서 날짜 조건으로 문서를 필터링할 때는 $match를 단독으로 사용하기보다 aggregate() 집계 파이프라인 내부에서 활용하는 것이 좋습니다. $gte, $lte, $gt, $lt 같은 비교 연산자를 조합하면 특정 날짜 이전·이후 조회나 기간 범위 검색도 손쉽게 구현할 수 있습니다. 참고로 ISODate()는 UTC 기준으로 처리되므로, 한국 시간(KST) 기준으로 조회할 때는 시차(UTC+9)를 고려해 조건을 설정해야 합니다.