从node.js按日期查询我mongo

时间:2012-10-12 14:54:50

标签: javascript node.js mongodb datetime mongoose

我想按日期查询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)它不起作用。我已经尝试了所有可能的解决方案,但他们都没有帮助我。

如果有人有任何解决方案,我会非常感激....

1 个答案:

答案 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")} })