2011-07-23 63 views
20

我正在使用MongoDB和官方Java驅動程序(版本2.6.3)。我有一個包含購物清單的MongoDB集合。購物清單的格式使用Java驅動程序更新MongoDB中的陣列

{ "_id" : { "$oid" : "4e2af1f43f8de96494d5271d"} , 
    "name" : "default" , 
    "items" : [ { "description" : "Cheese" , "quantity" : 1 , "unit" : "kg"} , 
       { "description" : "Water" , "quantity" : 3 , "unit" : "bottle"} ] } 

現在我想一個新的項目添加到列表中與DBCollectionupdate()方法。但無論我嘗試雖然它在告訴我

{ "updatedExisting" : true , "n" : 1 , "connectionId" : 63 , "err" : null , "ok" : 1.0} 

我的代碼執行以下操作將無法正常工作:

BasicDBObject updateQuery = new BasicDBObject(); 
    updateQuery.put("name", "default"); 

    BasicDBObject updateCommand = new BasicDBObject(); 
    updateCommand.put("$push", new BasicDBObject("items", newShoppingItem)); 
    WriteResult result = shoppingLists.update(updateQuery, updateCommand, true, true); 

newShoppingItemBasicDBObject其中包含了新項目的數據。我還嘗試使用BasicDBObjectBuilderJSON.parse()創建update()參數,但它沒有區別。

我也看過其他帖子,嘗試谷歌,但無濟於事。我究竟做錯了什麼?

感謝您的幫助!
Oliver

+0

我用MongoDB 2.5.3驅動運行了精確的代碼,它工作正常。確保你正在尋找正確的數據庫。 –

+0

這對我來說很有用,它可以更好地理解Mongo的Java驅動程序中有些模糊的語法。謝謝! – jsh

回答

10

是的,上面的代碼工作得很好。我現在知道我的錯誤在哪裏。我想要做的防彈,所以我認爲這將是最好的在最後的DBCollection使用save()和明確地保存購物清單DBOBJECT:

shoppingLists.save(shoppingList); 

我現在在其他一些論壇閱讀那麼從數據庫中檢索的對象然後不會與數據庫同步(現在對我來說聽起來有點邏輯:))。所以我每次都自己重寫了這些變化。刪除上面的行後,它工作:)

所以一個重要的規則:當你更新你的DBCollection - 這是直接發送到數據庫! - 不要保存更新前查詢的DBObject!它會覆蓋你的更新!

相關問題