我有一个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日期?
答案 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一起使用。