Node.js 使用FindOne(通过Nodejs本机驱动程序)按日期范围查询MongoDb
我试图在我的Node.js 使用FindOne(通过Nodejs本机驱动程序)按日期范围查询MongoDb,node.js,mongodb,Node.js,Mongodb,我试图在我的FindOne语句中使用日期范围查询MongoDb,但我无法让它工作。我正在使用Nodejs本机驱动程序。我尝试了各种选择,但都没有返回预期的记录 这是我的伪代码- console.log(sDate); // displays Fri Jun 20 2014 10:00:00 GMT+1000 (AUS Eastern Standard Time) var sDateISO = sDate.toISOString(); console.log
FindOne
语句中使用日期范围查询MongoDb,但我无法让它工作。我正在使用Nodejs本机驱动程序。我尝试了各种选择,但都没有返回预期的记录
这是我的伪代码-
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中运行此命令,记录将按预期返回-
==========
更新
我的问题在代码的其他地方——我在传递给FindOne
查询的单独参数中遇到了类型不匹配的问题
如中所述,并经以下确认,我可以直接在FindOne
查询中使用我的Javascript日期对象sDate
我使用typeOf
函数(find)确认sDate
确实是一个日期对象
因此,在检查了实际代码中的所有其他变量之后,我在别处发现了问题,与日期对象/参数无关。是MongoDB shell中Date
对象的包装。Robomongo嵌入了与mongo shell相同的JavaScript引擎,这就是为什么您的查询可以在Robomongo中工作
要查询日期范围,只需在查询中使用date
对象:
db.collection('events').findOne(
{ eventStartDate: { $lte: sDate}},
function(err, obj) {
console.dir(obj);
}
);