2012-10-12 47 views
4

我想按日期查詢mongo集合。例如:按日期查詢我從node.js獲得mongo

var startDate = new Date(dateNow.getUTCFullYear(),dateNow.getUTCMonth(),dateNow.getUTCDate(),dateNow.getUTCHours(),0); 
    var endDate = new Date(dateNow.getUTCFullYear(),dateNow.getUTCMonth(),dateNow.getUTCDate(),dateNow.getUTCHours()+1,0); 

query.timeRegistered = { '$gte' : startDate, '$lt' : endDate }; 

... make mongo query ... 

但它不起作用。我認爲這是因爲mongo以ISODate格式保存日期對象。這個查詢在shell中工作,因爲mongo將Date轉換爲ISODate,但是從javascript(node.js)它不起作用。我嘗試了所有可能的解決方案,但他們都沒有幫助我。

請,如果任何人有任何解決方案,我會很gratefull ....

+1

使用JavaScript'在你的Node.js Date'對象蒙戈查詢對象是正確的做法。你能展示更多的代碼嗎? – JohnnyHK

+1

請定義「不起作用」 - 你有錯誤嗎?你沒有得到任何文件返回? –

+0

日期範圍應該沒問題。你的問題可能是別的。查看相關問題:http://stackoverflow.com/questions/11973304/mongodb-mongoose-querying-at-a-specific-date –

回答

0

請考慮,默認情況下在蒙戈日期操作是UTC,例如我在2015年6月22日下午7:10 IST處輸入了「t1」收集記錄。然而,在shell中,您可以看到它的值爲'ISODate(「2015-06-22T 13:40:08.545Z」)',它是5:30小時。從您的JavaScript代碼(在瀏覽器上運行並因此採用瀏覽器時區)嘗試按照UTC時區創建開始和結束日期變量,然後查詢記錄。讓我們知道它是否行不通,保持簡單,給出一個非常大的日期範圍,看看它的工作與否。因爲我不是JS專家,所以我認爲您可能需要調整日期以使其成爲UTC。

但是,在下面的Mongo客戶端嘗試過,它的工作原理讓我從JS假設它也應該工作,只要你在合適的時區傳遞日期。


db.t1.find({dt:{$gt:ISODate("2015-06-22T13:40:00.000Z"),$lt:ISODate("2015-06-22T13:41:00.000Z")} })