ejs*_*in1 3 java mongodb isodate
我在使用 Java 搜索 mongodb 中的 ISODate 字段时遇到问题。我想找到完全匹配的日期。
以下是我查询第一个集合并获取 ISODate 字段“Timestamp”的方法。一旦我得到这个日期,我想搜索具有相同“时间戳”值的另一个集合。
FindIterable<Document> docList = thermalComfortCollection.find();
for(Document doc: docList) {
String ts = doc.get("Timestamp").toString();
System.out.println(ts);
Run Code Online (Sandbox Code Playgroud)
...
我正在格式化 ISODate,因为它以我想要搜索的不同格式返回日期。因此,我将其转换为这种模式“yyyy-MM-dd HH:mm:ss”
final DateTimeFormatter inputFormat =
DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy");
// The parsed date
final ZonedDateTime parsed = ZonedDateTime.parse(ts, inputFormat);
// The output format
final DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String date = outputFormat.format(parsed);
Run Code Online (Sandbox Code Playgroud)
我找不到如何为 ISODate 类型编写精确匹配语句,因此我同时输入 gte 和 lte 条件来获得精确匹配..!
BasicDBObject query = new BasicDBObject("Timestamp", //
new BasicDBObject("$gte", date).append("$lte", date));
System.out.println(query);
Run Code Online (Sandbox Code Playgroud)
并且查询不起作用。你能给我任何评论我的代码的哪一部分是错误的吗?
由于 MongoDB 以 UTC 和时区保存所有日期,因此您需要在Date时区设置为 UTC 的实例上进行查询。
这是我在 MongoDB 中的文档
{ "_id" : ObjectId("58886fa477717752e6eff16b"), "dd" : ISODate("2017-01-25T09:28:04.041Z") }
Run Code Online (Sandbox Code Playgroud)
要从 Java 查询它,我会这样做:
String dateStr = "2017-01-25 09:28:04.041 UTC";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS ZZZ").parse(dateStr);
BasicDBObject filter = new BasicDBObject("dd", date);
coll.find(filter);
Run Code Online (Sandbox Code Playgroud)