mongo isodate

반응형

MongoTemplate Search for ISODate

Spring MongoTemplate을 사용하여 MongoDB에서 ISODate를 가져오는 방법에 대하여 소개합니다.

일반적으로 MongoDB와 통신하기 위한 Query 작성시 Spring Data MongoDB Criteria를 사용하고 있습니다.

MongoDB의 Date 필드를 검색하기 위한 방법은 다음과 같습니다.

MongoDB test Collection

{
  "_id": {
    "$numberLong": "20588"
  },
  "title": "json document date type",
  "real_yn": "Y",
  "use_yn" : "Y",
  "view_date": {
    "$date": {
      "$numberLong": "1668674055000"  //2022-11-17T08:34:15.000+00:00
    }
}

Mongo shell에서는 일반적으로 ISODate 형식으로 감싸주면 원하는 결과를 얻을 수 있습니다.

db.test.find{"real_yn":"Y", "view_date":{"$lte":ISODate("2022-11-17T08:34:15.000+00:00")}}

이제 MongoTemplate에서 동일한 결과를 얻기 위해 Query를 작성해 보겠습니다.

MongoTemplate#find에서는 아래와 같이 Criteria를 생성하고, Java.util.Date or Java.time.LocalDateTime을 사용하면 $date field에 날짜를 기준으로 결과를 확인 할 수 있습니다.

Criteria criteria = new Criteria();
LocalDateTime today = LocalDateTime.parse(LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME));
criteria.and("real_yn").is("Y").and("view_date").lte(today); // lte(new Date())

mongoTemplate.find(Query.query(criteria), test.class);

하지만 Java Console에 출력된 Query를 Mongo shell에서 실행하면 원하는 결과를 얻을 수 없으니 이점을 유의해서 개발하시면 됩니다.

2022-11-17 22:33:52.907 DEBUG 17749 [8090-exec-1] o.s.d.m.c.MongoTemplate :find using 
query: { "real_yn": "Y", "view_date" : { "$lte": { "$date" : "2022-11-17T13:33:52.906Z"}}} 
fields: {} for class: class domain.test.Test in collection: Test

MongoTemplate에서 $date field를 Query 하는 방법 및 그 차이점에 대하여 알아봤습니다.

반응형

+ Recent posts

반응형