MongoDB에서 특정 날짜 형식으로 쿼리를 필터링하는 방법
MongoDB에서 특정 날짜 형식을 기준으로 쿼리 결과를 필터링하려면 $dateToString 연산자를 사용하면 됩니다. 이 연산자는 Date 타입의 값을 지정한 형식의 문자열로 변환해 주기 때문에, 날짜 형식이 일치하는 문서만 정확하게 추출할 수 있습니다.
이번 글에서는 실제 예제를 통해 $dateToString을 활용한 날짜 필터링 방법을 단계별로 살펴보겠습니다.
1. 테스트용 컬렉션 생성 및 문서 삽입
먼저 예제에 사용할 컬렉션을 만들고 날짜 데이터가 포함된 문서를 삽입합니다. 아래 예제에서는 'DueDate' 필드에 Date 객체를 저장합니다.
> db.demo433.insertOne({"DueDate":new Date("2019-11-23")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e771278bbc41e36cc3cae91")
}
> db.demo433.insertOne({"DueDate":new Date("2020-01-03")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e771290bbc41e36cc3cae92")
}2. find() 메서드로 전체 문서 확인
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.demo433.find();
위 쿼리를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
{ "_id" : ObjectId("5e771278bbc41e36cc3cae91"), "DueDate" : ISODate("2019-11-23T00:00:00Z") }
{ "_id" : ObjectId("5e771290bbc41e36cc3cae92"), "DueDate" : ISODate("2020-01-03T00:00:00Z") }3. $dateToString과 $match로 특정 날짜 필터링
이제 집계 파이프라인(aggregate)을 사용하여 특정 날짜 형식('YYYY-MM-DD')에 맞는 문서만 필터링해 보겠습니다. 처리 과정은 다음과 같습니다.
- $addFields: $dateToString을 이용해 DueDate를 '%Y-%m-%d' 형식의 문자열로 변환한 새 필드(stringDate)를 추가합니다.
- $match: stringDate 값이 '2020-01-03'인 문서만 걸러냅니다.
- $project: 임시로 만든 stringDate 필드를 결과에서 제외하여 원본 데이터만 깔끔하게 반환합니다.
> db.demo433.aggregate([
... { $addFields: {stringDate: { $dateToString: { format: "%Y-%m-%d", date: "$DueDate" } } } },
... { $match: {"stringDate":"2020-01-03"}},
... { $project:{"stringDate":0}}
... ])쿼리 실행 결과는 다음과 같습니다. DueDate가 '2020-01-03'인 문서 하나만 정확히 조회된 것을 확인할 수 있습니다.
{ "_id" : ObjectId("5e771290bbc41e36cc3cae92"), "DueDate" : ISODate("2020-01-03T00:00:00Z") }정리
$dateToString은 MongoDB에서 Date 타입 데이터를 원하는 문자열 형식으로 변환할 수 있는 강력한 도구입니다. $addFields로 변환된 날짜 문자열 필드를 만들고, $match로 조건에 맞는 문서를 필터링한 뒤, $project로 불필요한 필드를 제거하면 특정 날짜 형식 기반의 조회를 손쉽게 구현할 수 있습니다. 이 패턴은 날짜별 통계 조회나 특정 일자의 데이터 검색 등 다양한 상황에서 유용하게 활용됩니다.