2013-10-14 66 views
0

我對邊緣案例日期範圍缺乏準確性感到困惑。我有文件的日期總是從一天的開始 - 00:00:00 hr/min/sec - 開始,我無法使用$ gte操作符查詢它們。Mongo日期查詢在邊緣案例上失敗

> db.days.find({dateR : {$gte:new Date(2013,9,14)}},{dateR:1}) 
null 

> db.days.find({dateR : {$gte:new Date(2013,9,13)}},{dateR:1}) 
{ "_id" : ObjectId("525b79b5c598c6f439000600"), "dateR" : ISODate("2013-10-14T00:00:00Z") } 

爲什麼第二個查詢中找到的文檔沒有出現在第一個查詢中?

+0

當我在我的機器上測試,它的工作原理。你會添加完整的代碼包括數據插入? – Curry

+0

第一反應有些腥意。如果mongodb沒有找到任何東西,它不會在控制檯上說'null',至少不是我在這裏安裝的任何版本。此外,就像@EveryEvery一樣,我無法重現該問題。 – mnemosyn

+0

爲了清晰起見,我插入了null,但它顯然對我起作用。 :) @johnnyHK是正確的。這是一個時區問題。 – Greg

回答

2

這是因爲new Date(2013,9,14)根據當地時區創建日期,但MongoDB日期始終是UTC。

這應該工作:

db.days.find({dateR: {$gte: new Date(Date.UTC(2013, 9, 14))}}, {dateR: 1})