[英]Query MongoDb by date range using FindOne (via Nodejs native driver)
我正在嘗試在我的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中運行此命令,則記錄將按預期返回-
==========
UPDATE
我的問題在代碼的其他地方-我在傳遞給FindOne
查詢的單獨參數中遇到類型不匹配的問題。
如文檔中所述,並在下面得到Christian P的確認,我可以在FindOne
查詢中直接使用Javascript日期對象sDate
。
我使用typeOf
函數(在此處找到)來確認sDate
確實是Date對象。
因此,在檢查了我的實際代碼中的所有其他變量之后,我在其他地方發現了與Date對象/參數無關的問題。
ISODate是MongoDB Shell中Date
對象的包裝。 Robomongo嵌入了與mongo shell相同的JavaScript引擎,這就是您的查詢在RoboMongo中工作的原因。
要查詢日期范圍,您只需在查詢中使用Date
對象即可:
db.collection('events').findOne(
{ eventStartDate: { $lte: sDate}},
function(err, obj) {
console.dir(obj);
}
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.