我对边缘情况周围的日期范围缺乏准确性感到困惑。我有一些文档的日期总是从一天的开始开始 - 00:00:00 的小时/分钟/秒 - 并且无法使用 $gte 运算符查询它们。
> db.days.find({dateR : {$gte:new Date(2013,9,14)}},{dateR:1})
null
> db.days.find({dateR : {$gte:new Date(2013,9,13)}},{dateR:1})
{ "_id" : ObjectId("525b79b5c598c6f439000600"), "dateR" : ISODate("2013-10-14T00:00:00Z") }
为什么在第二个查询中找到的文档没有出现在第一个查询中?
发生这种情况是因为new Date(2013,9,14)
根据本地时区创建日期,但MongoDB日期始终是UTC。
这应该有效:
db.days.find({dateR: {$gte: new Date(Date.UTC(2013, 9, 14))}}, {dateR: 1})