2011-12-10 94 views
3

我想執行一個範圍查詢在mongo數據庫中的鳴叫集合。出於某種原因,下面的查詢將工作:日期範圍查詢失敗的MongoDB數據庫的鳴叫

db.posts.find({'created_at': {$gte:"Fri Nov 25 00:00:00 +0000 2011", $lt:"Fri Nov 25 23:59:59 +0000 2011"}}) 

但以下不會:

db.posts.find({'created_at': {$gte:"Thu Nov 24 00:00:00 +0000 2011", $lt:"Fri Nov 25 23:59:59 +0000 2011"}}) 

我進入鳴叫作爲一個JSON對象直接進入數據庫,所以這不應該是一個問題,對嗎?

回答

5

您需要確保您使用的是真實日期值,而不是字符串。例如:

var from = ISODate("2011-11-24") 
var to = ISODate("2011-11-25T23:59:59") 
db.posts.find({ created_at : { $gte : from, $lt : to } }) 

除了確保您的查詢使用真正的日期值之外,請確保您的存儲數據也包含真正的日期值。

+0

這回沒事了我。這是一個有效的語法,但結果是一個空集...... – WildBill

+0

如果您的數據具有字符串而不是真正的日期值,則查詢不起作用。 –

1

您的查詢的問題是,您正在比較字符串與數據對象,這是行不通的。 如果您正在使用shell,你可以寫這樣的事情:

db.testing.find({ 
    'date': { 
     $lt : new Date(2013,10,1), 
     $gte : new Date(2000,10,1) 
    } 
}) 

這將最終將它轉換成

db.testing.find({ 
    "date" : { 
     "$lt" : ISODate("2013-11-01T00:00:00Z"), 
     "$gte" : ISODate("2000-11-01T00:00:00Z") 
    } 
}) 

range queries

dates