Spring Boot mongodb:将日期查询为ISODate而不是$ date long

时间:2018-12-07 12:14:48

标签: spring spring-boot spring-data-mongodb

我正在建立这样的查询:

Date date = new Date();
Criteria criteria = Criteria
    .where("metadata.value.digitalitzacio.dataDigitalitzacio")
    .is(new Date(2018,10,10));

this.mongoTemplate.find(Query.query(criteria));

它建立以下查询:

Query: { "metadata.value.digitalitzacio.dataDigitalitzacio" : { "$date" : 61499948400000 } }

所以,它失败了。

它以$date long而不是ISODate的形式发送查询。

我的意思是,metadata.value.digitalitzacio.dataDigitalitzacio作为ISODate存储在集合中:

{
    "_id" : "cpd4-175ec7f0-d70f-4b63-a709-69918d98c4f2",
    "metadata" : [
        {
            "user" : "RDOCFO",
            "value" : {
                "digitalitzacio" : {
                    "csvDigitalitzacio" : "eeeeeeeeee",
                    "dataDigitalitzacio" : ISODate("2018-10-10T00:00:00Z"),
                    "empleatDigitalitzacio" : "empleat-digitalitzacio"
                }
            }
        }
    ]
}

但是它被查询为$date long。我该怎么解决?

1 个答案:

答案 0 :(得分:0)

https://stackoverflow.com/a/30294522/9731186中,以下代码应该可以工作,尽管我没有对其进行测试。 java.util.Date(int, int, int)现在已弃用。

String string_date = "10-10-2018";
SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy");
Date d = new Date();
try {
    d = f.parse(string_date);
    long milliseconds = d.getTime();
} catch (ParseException ex) {
    ex.printStackTrace();
}
  Criteria criteria = Criteria
    .where("metadata.value.digitalitzacio.dataDigitalitzacio")
    .is(d);
}
  this.mongoTemplate.find(Query.query(criteria));
}