javascript - 从 node.js 在 mongodb 中按日期查询

标签 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) 中它不起作用。我已经尝试了所有可能的解决方案,但没有一个对我有帮助。

拜托,如果有人有任何解决方案,我将不胜感激......

最佳答案

请考虑默认情况下 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/

相关文章:

javascript - 将 onclick 与 Google Analytics 结合使用并在新选项卡中打开

javascript - jQuery UI sortable() 方法不起作用

node.js - 我可以将 npm 设置为使用 .pac 文件吗?

c - mongo c 驱动程序中的 bson_iter_find 中的顺序重要吗

javascript - Google 托管库不必要地使用缓存断路器

javascript - 更新数组 useState react 钩子(Hook)(Next.js)

javascript - 仅当 mongoDB Node JS 上存在集合时才显示给客户端

node.js - POST 请求类型错误 - 无法读取未定义的属性

arrays - MongoDB 获取数组中特定键的计数

javascript - Mongoose .save() 和使用 update() 之间的区别