4

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

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

4

1 回答 1

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")} })
于 2015-06-22T13:54:32.503 回答