使用 ISODate 转换查询

Posted

技术标签:

【中文标题】使用 ISODate 转换查询【英文标题】:Convert query with ISODate 【发布时间】:2022-01-14 11:56:30 【问题描述】:

我有这个 MongoDB 查询:

db.Certificates.countDocuments(
  "vaccination.somministration_date":ISODate("2021-08-04")
)

我也想在我的 java 应用程序中执行它,所以我尝试了这段代码:

Date date = new SimpleDateFormat("yyyy-MM-dd").parse("2021-08-04");
Bson query = eq("vaccination.somministration_date", date);
long count = collection.countDocuments(query);

但是我得到的结果是不同的(从 mongo 我得到 1 作为结果,而从 java 得到 0)

【问题讨论】:

【参考方案1】:

MongoDB 将日期时间存储在 GMT+0 中。您在 javascript 中的第一个查询是调用ISODate(),它总是产生一个带有 GMT+0 ("Z"ulu) 时间偏移的日期时间。 您的 Java 执行环境在调用 parse() 时可能会考虑本地时间偏移并创建稍微不同的日期时间。

【讨论】:

以上是关于使用 ISODate 转换查询的主要内容,如果未能解决你的问题,请参考以下文章

Mongo:如何将所有使用 long timeStamp 的条目转换为 ISODate?

使用 pymongo 创建时区感知 ISODate

Mongodb:基于 ISODate 格式的时间查询

Mongodb:基于 ISODate 格式的时间查询。我的查询有啥问题?

mongodb isodate怎么查询

将 MongoDB 字段从字符串转换为数组中的 ISODate