我想按日期查询mongo集合。示例:
var startDate = new Date(dateNow.getUTCFullYear(),dateNow.getUTCMonth(),dateNow.getUTCDate(),dateNow.getUTCHours(),0);
var endDate = new Date(dateNow.getUTCFullYear(),dateNow.getUTCMonth(),dateNow.getUTCDate(),dateNow.getUTCHours()+1,0);
query.timeRegistered = { '$gte' : startDate, '$lt' : endDate };
... make mongo query ...
但它不起作用。我假设这是因为mongo以ISODate格式保存日期对象。这个查询适用于shell,因为mongo将Date转换为ISODate,但是从javascript(node.js)它不起作用。我已经尝试了所有可能的解决方案,但他们都没有帮助我。
如果有人有任何解决方案,我会非常感激....
答案 0 :(得分:0)
默认情况下,请考虑Mongo中的日期操作是UTC格式,例如:我在 2015年6月22日晚上7:10 IST 的“ t1 ”集合中创下了记录。但是,在shell中,您可以看到它的值为'ISODate(“2015-06-22T 13:40 :08.545Z”)',其中 5:30 小时落后。从您的javascript代码(在浏览器上运行,因此采用浏览器时区)尝试按照UTC时区创建开始和结束日期变量,然后查询记录。如果它不起作用,请告诉我们,保持简单,给出一个非常大的日期范围,看它是否有效。由于我不是JS专家,我认为您可能需要调整日期以使其成为UTC。
然而,尝试使用下面的Mongo客户端并且它起作用,所以我假设从JS也应该工作,只要你在正确的时区传递日期。
db.t1.find({dt:{$gt:ISODate("2015-06-22T13:40:00.000Z"),$lt:ISODate("2015-06-22T13:41:00.000Z")} })