使用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); } );