2011-07-23 6 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); 

newShoppingItemは新しいアイテムのデータが含まれていBasicDBObjectです。私はBasicDBObjectBuilderJSON.parse()update()のパラメータを作成しようとしましたが、違いはありません。

私はまた、他の投稿を見て、googleingを試してみましたが、役に立たない。私は間違って何をしていますか?

ありがとうございました!
Oliver

+0

MongoDB 2.5.3ドライバで正確なコードを実行したところ、うまくいきました。あなたが正しいDBを探していることを確認してください。 –

+0

これは、MongoのJavaドライバのやや曖昧な構文をよりよく理解する方法として私にとって有益でした。ありがとう! – jsh

答えて

10

はい、上記のコードは完全に正常に動作します。私の誤りがどこにあったのか分かっています。私はそれを防弾をやってみたかったので、私はそれが最後でDBCollectionにsave()を使用して、明示的に買い物リストDBObjectを保存するのがベストだろうと思った:私は今、他のいくつかのフォーラムで読ん

shoppingLists.save(shoppingList); 

をそのデータベースから取得したオブジェクトは、その後データベースと同期されません。だから毎回自分で変更を上書きしました。上記の行を削除した後に働いた:)

重要なルール:あなたがDBCollectionを更新すると、これはデータベースに直接送信されます! - アップデート前に質問したDBObjectを保存しないでください!あなたのアップデートを上書きします!

関連する問題