我想按日期查询 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) 中它不起作用。我已经尝试了所有可能的解决方案,但没有一个对我有帮助。
拜托,如果有人有任何解决方案,我将不胜感激......
最佳答案
请考虑默认情况下 Mongo 中的日期操作采用 UTC,例如我在 2015 年 6 月 22 日晚上 7:10 IST 进入“t1”收藏的记录。但是,在 shell 中,您可以看到它的值是“ISODate("2015-06-22T13: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")} })
关于javascript - 从 node.js 在 mongodb 中按日期查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12861730/