MongoDB에서 ISODate() 형식으로 저장된 날짜 필드를 조회하려면 비교 연산자를 함께 사용해야 합니다. 그중 가장 널리 쓰이는 것이 바로 $gte(크거나 같음) 연산자입니다. 이 글에서는 실제 예제를 통해 ISODate 기반 날짜 쿼리를 작성하는 방법을 단계별로 살펴보겠습니다.
1. 테스트용 컬렉션 생성하기
먼저 개념을 이해하기 위해 문서가 하나 포함된 컬렉션을 생성합니다. 아래 쿼리는 학생 정보와 입학 날짜(AdmissionDate)를 ISODate 형식으로 저장하는 예제입니다.
> db.dateDemo.insertOne({"StudentName":"John","StudentAge":26,"AdmissionDate":new ISODate("2013-06-07")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a65799064dcd4a68b70ea")
}컬렉션이 정상적으로 생성되었으며, 삽입된 문서의 ObjectId도 함께 반환된 것을 확인할 수 있습니다.
2. 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다. pretty()를 붙이면 결과를 보기 좋게 정렬해서 출력합니다.
> db.dateDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c8a65799064dcd4a68b70ea"),
"StudentName" : "John",
"StudentAge" : 26,
"AdmissionDate" : ISODate("2013-06-07T00:00:00Z")
}날짜 값이 시간 정보(00:00:00)와 UTC 타임존(Z)을 포함한 ISODate 형태로 저장된 점에 주목하세요. 이 형식이 MongoDB 날짜 쿼리의 기준이 됩니다.
3. $gte 연산자로 날짜 조건 쿼리 작성하기
이제 본격적으로 ISODate와 $gte 연산자를 조합한 날짜 쿼리를 작성해 보겠습니다. 아래 쿼리는 입학 날짜가 2013년 6월 7일 이후인 문서를 조회합니다.
> db.dateDemo.find({"AdmissionDate":{"$gte": ISODate("2013-06-07T00:00:00Z")}}).pretty();실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c8a65799064dcd4a68b70ea"),
"StudentName" : "John",
"StudentAge" : 26,
"AdmissionDate" : ISODate("2013-06-07T00:00:00Z")
}조건에 해당하는 문서가 정상적으로 반환되었습니다. $gte는 'greater than or equal', 즉 지정한 날짜와 같거나 그 이후인 문서를 모두 가져옵니다.
4. 함께 알아두면 좋은 날짜 비교 연산자
$gte 외에도 상황에 맞게 다양한 비교 연산자를 활용할 수 있습니다.
- $gt: 지정한 날짜보다 이후인 문서 조회
- $lte: 지정한 날짜와 같거나 이전인 문서 조회
- $lt: 지정한 날짜보다 이전인 문서 조회
- $eq / $ne: 특정 날짜와 일치하거나 일치하지 않는 문서 조회
예를 들어 특정 기간 사이의 데이터를 조회하려면 아래처럼 두 연산자를 조합하면 됩니다.
> db.dateDemo.find({
"AdmissionDate": {
"$gte": ISODate("2013-01-01T00:00:00Z"),
"$lte": ISODate("2013-12-31T23:59:59Z")
}
}).pretty();마무리
MongoDB에서 날짜 데이터는 반드시 ISODate 형식으로 저장하고, 조회 시에도 동일한 형식으로 조건을 지정해야 정확한 결과를 얻을 수 있습니다. 문자열 형태의 날짜로 비교하면 의도하지 않은 결과가 나올 수 있으므로 항상 주의하세요. $gte를 비롯한 비교 연산자를 잘 활용하면 날짜 범위 검색, 통계 집계 등 다양한 작업을 효율적으로 처리할 수 있습니다.