【问题标题】:Query by date i mongo from node.js从 node.js 在 mongodb 中按日期查询
【发布时间】:2012-10-03 10:13:51
【问题描述】:

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

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

【问题讨论】:

  • 在 node.js mongo 查询对象中使用 Javascript Date 对象是正确的方法。你能展示更多你的代码吗?
  • 请定义“不工作” - 你得到一个错误吗?没有文件退回吗?
  • 日期范围应该没问题。你的问题可能是别的。查看相关问题:stackoverflow.com/questions/11973304/…

标签: javascript node.js mongodb datetime mongoose


【解决方案1】:

请考虑默认情况下,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")} })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-10
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 2011-04-10
    • 2014-07-14
    相关资源
    最近更新 更多