簡體   English   中英

使用FindOne按日期范圍查詢MongoDb(通過Nodejs本機驅動程序)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM