2013-05-28 94 views
0

我想下面的集合中的比較日期日期MongoDB中

$ db.notifications.find(){ 「_id」 漸相比字符串: 的ObjectId( 「51a4467be4b0142fc8b80eda」), 「時間」 :「Tue May 28 11:24:03 IST 2013」​​,「KEY」:「VALUE1」} {「_id」: ObjectId(「51a4467be4b0142fc8b80edb」),「time」:「Tue May 28 11:24:03 IST 2013" , 「KEY」: 「VALUE2」}

使用

$ db.notifications.find({ 「時間」:{ 「$ GT」: 「週五5月31日00:00:00北京時間 2013」​​}})

,但我所觀察到的它是比較對待「時間」作爲 字符串不是日期,因此第二個命令返回我的 條目。

$ db.notifications.find({ 「時間」:{ 「$ GT」: 「週五5月31日00:00:00 IST 2013」​​}}){ 「_id」:的ObjectId( 「51a4467be4b0142fc8b80eda」 )「time」:「Tue May 28 11:24:03 IST 2013」​​,「KEY」:「VALUE1」} {「_id」: ObjectId(「51a4467be4b0142fc8b80edb」),「time」:「Tue May 28 11 :24:03 IST 2013" ,‘KEY’:‘VALUE2’}

能否請你幫我正確的查詢,也讓我知道如何 是正確的版本,可以用Java編寫。

非常感謝!

EDIT1:

我使用下面的代碼

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); 
dateFormat.setLenient(false); 
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
String nowString = dateFormat.format(new Date()); 
Date nowDate = dateFormat.parse(nowString); 
input.put("formattedDate", nowDate); 
DBCollection collection = db.getCollection(<collection name>); 
DBObject dbObject = (DBObject) JSON.parse(input.toString()); 
collection.insert(dbObject);" 

保存日期和使用

DBObject query = QueryBuilder.start().put("formattedDate") 
            .greaterThan(prevDate).get(); 
DBCursor cursorDocJSON = collection.find(query); 

我看到,我只是節省 「時間」 作爲日期查詢。爲什麼仍然有問題?

+1

這是因爲你正在將它存儲爲一個字符串! –

回答

0

我認爲你的日期應該是一個ISODate對象。目前它是你的查詢中的一個字符串。嘗試下面的東西。

db.coll.find({"time" : { $gte : new ISODate("2013-05-28T20:18:00Z") }}); 

此外,related link

+0

這是正在執行的查詢。 (「」時間「:{」$ gt「:{」$ date「:」2013-05-24T18:30:00.000Z「}}}) – user2429238

1

它看起來像你的日期被存儲爲一個字符串,而不是作爲一個ISODate。如果它被保存爲一個真正的日期,而不是一個字符串,你會看到類似:

> db.MyCollection.find() 
{ "_id" : ObjectId("51a4e4aa3004bc68e4f499e5"), "date" : ISODate("2000-09-29T23:00:00Z") } 

確保當你保存,你將它作爲一個日期的「時間」字段。如果使用Java驅動程序插入值,則需要確保時間字段在將其添加到DBObject時是java.util.Date(假設您直接使用Java驅動程序而不是某些第三方庫)。

當您將它作爲日期插入時,您應該能夠使用shell中的ISODate值或Java驅動程序中的Date來執行所需的查詢類型。

+0

我正在使用保存日期下面的代碼 SimpleDateFormat dateFormat = new SimpleDateFormat(「yyyy-MM-dd'T'HH:mm:ss.SSS」)。 dateFormat.setLenient(false); dateFormat.setTimeZone(TimeZone.getTimeZone(「UTC」)); String nowString = dateFormat.format(new Date()); Date nowDate = dateFormat.parse(nowString); input.put(「time」,nowDate); DBCollection collection = db.getCollection(); DBObject dbObject =(DBObject)JSON.parse(input.toString()); collection.insert(dbObject); 你能幫我理解我的錯誤嗎? – user2429238

+0

你的評論中的代碼創建一個新的Date對象(新的Date()),使用SimpleDateFormatter把它變成一個字符串(dateFormat.format(new Date()),將它*轉換回Date對象(dateFormat。解析(nowString))。通過執行input.put(「time」,new Date()),你會在很少的代碼行中得到相同的結果;但是這仍然是錯誤的。其他呢? – Trisha