我有一个文档,时间如下:
"time" : ISODate("2013-12-31T03:00:00Z")
我目前正在尝试通过 Node.JS 驱动程序使用 MongoDB 查询来查找此文档。
var time = new Date(2013,11,31,3,0,0,0);
这个日期使用 console.log() 打印如下
Tue Dec 31 2013 03:00:00 GMT-0500 (EST)
当我尝试使用标准 collection.findOne 查找此文档时(我肯定查询本身不是问题,而是时间戳),它找不到文档。 Mongo shell 显示文档存在。我如何错误地格式化我的时间?
编辑: 我也会添加查询。
collection.findOne(
{
"time" : time},
{"_id" : 0},
function(err, items){
if (err){
throw err;
}
console.log(err);
console.log(items);
res.send(items);
});
最佳答案
您遇到时区问题。您要查找的时间戳是 2013-12-31T03:00:00Z
,尾随 Z
表示“零时区偏移”。但是您正在使用的 new Date
版本:
var time = new Date(2013,11,31,3,0,0,0);
解释当前时区中的所有这些值。如果我们查看您的 console.log
输出:
Tue Dec 31 2013 03:00:00 GMT-0500 (EST)
我们可以看到您处于 EST 时区,并且您的 time
是 EST 中的 03:00
而不是 03:00
在 UTC 中。
可能最简单的方法是使用 Date.UTC
在创建 Date
实例之前将您的组件转换为 UTC:
var time = new Date(Date.UTC(2013,11,31,3,0,0,0));
现在您的 time
应该有 2013-12-31T03:00:00Z
并且您的查询应该会更好地工作。
关于javascript - 按时间搜索 - MongoDB/NodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20851971/