【问题标题】:MongoDb search on date fieldMongoDb 搜索日期字段
【发布时间】:2019-02-06 05:21:27
【问题描述】:

我有一个带有 ISODate 格式的“DateAdded”的 Mongo 集合

{
"_id" : 4098199,
"DateAdded" : ISODate("2018-08-31T05:06:13.150Z")
}

所以它是 1 小时,然后是本地日期时间

LocalDatetime is 2018-08-31 06:06:13 +01:00
UTC is 2018-08-31T05:06:13.150Z

当我尝试获取 2018 年 8 月 31 日 06:00:00 之后添加的记录时使用以下查询,我没有像 UTC 那样获取此记录

 db.getCollection('User').find({"DateAdded":{$gte: new ISODate('2018-08-31T6:00:00Z')}})

在 MongoDB 中搜索日期字段时如何转换 UTC 日期?

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    首先ISODate('2018-08-31T6:00:00Z') 有一个错字——应该是06:00:00Z。没有前导 0 ISODate 助手返回 '2018-08-31T00:00:00Z' 0am UTC 并且查询实际上返回文档。

    其次,与当地时间无关。 ISODate 是 UTC,所以 ISODate("2018-08-31T05:06:13.150Z") 是世界标准时间早上 5 点,ISODate("2018-08-31T06:06:13.150Z") 是世界标准时间早上 6 点。 5 < 6,所以$gte条件不满足,文档没有返回。

    最后,如果您想使用当地时间 - 请改用 Date

    db.getCollection('User').find({"DateAdded":{$gte: new Date('2018-08-31T6:00:00')}})
    

    将返回在当地时间早上 6 点 UTC 早上 5 点之后创建的所有文档。注意,末尾没有Z,它指定了UTC时区。

    作为建议 - 不要弄乱当地时间。尽快将其转换为 UTC 并始终使用 UTC。

    【讨论】:

    • 不错!新日期()工作正常,我在新日期()中使用'Z'
    猜你喜欢
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多