2011-09-15 10 views
9

は、私は私の文書には、以下の構造を有する:MongoDBの特定のドキュメントの配列内の特定の埋め込みドキュメントの値を更新するには?

{ 
    _id : ObjectId("43jh4j343j4j"), 
    array : [ 
      { 
       _arrayId : ObjectId("dsd87dsa9d87s9d7"), 
       someField : "something", 
       someField2 : "something2" 
      }, 
      { 
       _arrayId : ObjectId("sds9a0d9da0d9sa0"), 
       someField : "somethingElse", 
       someField2 : "somethingElse2" 
      } 
    ] 
} 

は、私が唯一の配列内の項目の一つ、_arrayId(例えば一致するいずれかのsomeFieldsomeField2を更新したい_arrayId : ObjectId("dsd87dsa9d87s9d7") ;のみ、この文書(例えば_id : ObjectId("43jh4j343j4j"))なしその他について

arrayIdsが、私はそれが特定のドキュメントのためにする必要が理由です文書に固有のものではありません。碑文。存在するすべてのドキュメントの配列内の値を更新したい場合は$ positional operatorを使用できますが、それは私が望むものではありません。

私はでこれを達成しようとしていますが、コマンドラインソリューションも同様に機能します。

答えて

13

$ positional演算子を使用してこれを実行できます。しかし、_arrayidフィルタとともに親文書のobjectidを指定する必要があります。以下のコマンドラインクエリが正常に動作します。ここ

db.so.update({_id:ObjectId("4e719eb07f1d878c5cf7333c"), 
       "array._arrayId":ObjectId("dsd87dsa9d87s9d7")}, 
       {$set:{"array.$.someField":"updated"}}) 
+0

!ありがとう。したがって、 'coll.update(query、data)'のクエリは、あなたが探しているドキュメントを見つけるためのフィルタのように機能し、あなたが興味を持っているドキュメントの部分のセレクタとして機能しますか? – rjgonzo

+0

はい正確に..うれしいことに.. – RameshVel

17

に翻訳RameshVelのソリューションです:

DB db = conn.getDB("yourDB"); 
    DBCollection coll = db.getCollection("yourCollection"); 

    ObjectId _id = new ObjectId("4e71b07ff391f2b283be2f95"); 
    ObjectId arrayId = new ObjectId("4e639a918dca838d4575979c"); 

    BasicDBObject query = new BasicDBObject(); 
    query.put("_id", _id); 
    query.put("array._arrayId", arrayId); 

    BasicDBObject data = new BasicDBObject(); 
    data.put("array.$.someField", "updated"); 

    BasicDBObject command = new BasicDBObject(); 
    command.put("$set", data); 

    coll.update(query, command); 
素晴らしい作品
+0

あまりにも私は2時間のような答えを探してくれてありがとう... –

+0

someField配列を作成してもう1つのレベルの配列があればどうなりますか?私たちはdata.put( "array. $。someField。$。anotherField"、 "updated")のようなものを書くことができますか?私のために働いていない – Manish

+0

ありがとう、私の問題を解決しました。 array。$。フィールドはトリックでした(私は3.5を使用しています) – Gilian

関連する問題