在日期字段上搜索 MongoDb



我有一个 Mongo 集合,其中包含 ISODate 格式的"DateAdded">

{
"_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-08-31 06:00:00 之后添加的记录时使用以下查询,我没有像 UTC 那样获得此记录

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

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

首先ISODate('2018-08-31T6:00:00Z')有一个错别字 - 它应该是06:00:00Z的。如果没有前导0ISODate 帮助程序'2018-08-31T00:00:00Z'UTC 凌晨 0 点返回,查询实际上返回文档。

其次,没有关于当地时间的信息。ISODate 采用 UTC,因此ISODate("2018-08-31T05:06:13.150Z")是UTC时间凌晨5点,ISODate("2018-08-31T06:06:13.150Z")是UTC时间早上6点。5 < 6,因此不满足$gte条件,并且不返回文档。

最后,如果要使用本地时间 - 请改用Date

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

将返回当地时间凌晨 5 点、UTC 时间上午 6 点之后创建的所有文档。请注意,末尾没有指定 UTC 时区的Z

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

最新更新