MongoDb搜索日期字段

时间:2018-08-31 07:59:18

标签: mongodb mongodb-query

我有一个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日期?

1 个答案:

答案 0 :(得分:0)

首先ISODate('2018-08-31T6:00:00Z')有一个错字-应该是06:00:00Z。如果没有领先的0 ISODate帮助程序,则返回世界标准时间凌晨0:'2018-08-31T00:00:00Z',并且查询实际上返回了文档。

其次,当地时间一无所有。 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')}})

将返回当地时间上午5点(UTC)之后创建的所有文档。请注意,结尾没有Z,用于指定UTC时区。

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