2012-01-13 69 views
3

我在MongoDB中比較日期檢索數據

{ "_id" : ObjectId("4f0ee7310b09f7a254000001"), "createdAt" : ISODate("2012-01-12T23:58:28Z") } 
{ "_id" : ObjectId("4f0ee7350b09f7a254000002"), "createdAt" : ISODate("2012-01-12T23:58:28Z") } 
{ "_id" : ObjectId("4f0ee855e63cecb654000001"), "createdAt" : ISODate("2012-01-13T00:03:59Z") } 
{ "_id" : ObjectId("4f0ee859e63cecb654000002"), "createdAt" : ISODate("2012-01-13T00:04:08Z") } 
{ "_id" : ObjectId("4f0ee97c212d70bc54000001"), "createdAt" : ISODate("2012-01-13T00:08:54Z") } 
{ "_id" : ObjectId("4f0ee99f212d70bc54000002"), "createdAt" : ISODate("2012-01-13T00:09:27Z") } 

我只想顯示基於日期的記錄數據是這樣的。檢查我的代碼,它返回我什麼

//dateStr = '120112' or '120113' 
var year = '20' + dateStr.substring(0,2); 
var month = dateStr.substring(2,4); 
var day = dateStr.substring(4); 
dateStr = new Date(year,month,day,0,0,0); 

var nextDate = new Date(year,month,day,23,59,59); 

GPSData.find({"createdAt" : { $gte : dateStr, $lte: nextDate }}, function(err, data) { 
    if(err) 
     console.log(err); 

    res.writeHead(200, { 
      "Content-Type": "application/json", 
      "Access-Control-Allow-Origin": "*" 
    }); 
    var body = JSON.stringify(data); 
    res.end(body); //no output here just [] 
}); 

但蒙戈外殼使用此命令我得到的日期「120112」的結果

db.gpsdatas.find({"createdAt" : {new ISODate("2012-01-12T00:00:00Z"), $lte: new ISODate("2012-01-12T23:59:59Z") }}); 
+0

不知道怎麼貓鼬的作品,但你可能會與{ 「createdAt」:{$ GTE:dateStr}, 「createdAt」:{$ LTE:nextDate}}嘗試 – milan 2012-01-13 13:42:52

回答

1

你的問題是你對Date類的理解。我假設你試圖爲1月12日創建一個日期對象,但是新日期(2012,1,12)實際上是2月11日或12日,取決於當地時區。因此,您的代碼不會執行您在shell中執行的查詢。

閱讀上這裏的細節http://www.w3schools.com/jsref/jsref_obj_date.asp

0

盲答案,而無需自己任何測試:如果添加會發生什麼這行之前的GPSData.find(..)行?

dateStr = dateStr.toString(); 
nextDate = nextDate.toString(); 

此外,請嘗試console.log以查看輸出字符串的外觀。它可能與您預期的格式完全不同。

+0

我的意思是:如果按字符串進行比較會發生什麼? – StevenLooman 2012-01-13 14:29:59