按时间search – MongoDB / NodeJS

我有一个文件,有以下时间:

"time" : ISODate("2013-12-31T03:00:00Z") 

我目前正在尝试使用带有Node.JS驱动程序的MongoDB查询来查找此文档。

 var time = new Date(2013,11,31,3,0,0,0); 

这个date打印出来如下使用console.log()

 Tue Dec 31 2013 03:00:00 GMT-0500 (EST) 

当我尝试使用标准的collection.findOne(我肯定查询本身不是问题,而不是时间戳)find这个文档时,它找不到文档。 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而不是UTC的03:00

可能最简单的做法是在创buildDate实例之前使用Date.UTC将组件转换为UTC:

 var time = new Date(Date.UTC(2013,11,31,3,0,0,0)); 

现在你应该有2013-12-31T03:00:00Z在你的time和你的查询应该更好地工作。