使用FindOne按date范围查询MongoDb(通过Nodejs本地驱动程序)

我想在我的FindOne语句中使用date范围来查询MongoDb,但是我无法使它工作。 我正在使用Nodejs本地驱动程序。 我已经尝试了各种select,但没有什么是返回预期的logging。

这是我的伪代码 –

 console.log(sDate); // displays Fri Jun 20 2014 10:00:00 GMT+1000 (AUS Eastern Standard Time) var sDateISO = sDate.toISOString(); console.log(sDateISO); // displays 2014-06-20T00:00:00.000Z // all of these return null object db.collection('events').findOne( { eventStartDate: { $lte: new Date(sDate)}}, function(err, obj) { console.dir(obj); } // displays null ); db.collection('events').findOne( { eventStartDate: { $lte: (sDate) }}, function(err, obj) { console.dir(obj); } // displays null ); db.collection('events').findOne( { eventStartDate: { $lte: new Date(sDateISO) }}, function(err, obj) { console.dir(obj); } // displays null ); db.collection('events').findOne( { eventStartDate: { $lte: (sDateISO) }}, function(err, obj) { console.dir(obj); } // displays null ); 

但是,如果我在RoboMongo中运行这个logging,那么logging会按预期返回 –

在这里输入图像说明

==========

UPDATE

我的问题是在我的代码中的其他地方 – 我有一个types不匹配的问题在一个单独的parameter passing给FindOne查询。

正如在文档中所述,并由下面的Christian P确认,我可以直接在FindOne查询中使用我的Javascriptdate对象sDate

我使用了一个typeOf函数(在这里find)来确认sDate确实是一个Date对象。

所以,在我的实际代码中检查所有其他variables后,我发现其他地方的问题,与Date对象/参数无关。

ISODate是MongoDB shell中Date对象的封装。 Robomongoembedded与mongo shell相同的JavaScript引擎,这就是为什么你的查询在RoboMongo中工作的原因。

要查询date范围,只需在查询中使用Date对象:

 db.collection('events').findOne( { eventStartDate: { $lte: sDate}}, function(err, obj) { console.dir(obj); } );