2016-06-24 4 views
0

私はこのスキーマを持つの名前を持っています。私がやろうとしています何MongoDb:レコードを更新して配列にプッシュします。 'addresses.0'と 'addresses.0.insertupdate'を同時に更新できません

{ 
    name: "A1", 
    addresses : 
    [ 
    { 
    add1 : "a1", 
    add2 : "a2", 
    insertupdate:[ 
      { 
      "mode" : "i" , 
      "user" : "abcd" 
      } 
       ] 
    } 
    , 
    { 
    add1 : "a3", 
    add2 : "a4", 
    insertupdate:[ 
      { 
      "mode" : "i", 
      "user" : "pqrs" 
      } 
       ] 
    } 
    ], 
    insertupdate:[ 
      { 
      "mode" : "i", 
      "user" : "pqrs" 
      } 
    ] 
    } 

私はADD2 = "A5" & addresses.insertupdate内部記録などのinsertUpdateを押すなどの記録ADD1 = "A1" を更新します。私が得た

db.names.update({name:"A1",addresses.add1:"a1"}, 
{ 
$set : { 
     addresses.$ : 
     { 
     "add2":"a5" 
     } 
     }, 
$push : { 
    "insertupdate" : {"mode":"u","user":"xyz"}, 
    "addresses.$.insertupdate" : {"mode":"u","user":"xyz"} 
     } 
} 
); 

エラー:

が同じ 時間

で 'addresses.0' と 'addresses.0.insertupdate' を更新できませんが、私が試した何

編集:

このコマンドは正常に終了しました。しかし、私は自分の価値観を設定することはできません。つまり、同時にポジション演算子を使用して&プッシュを使用する方法が必要です。

db.names.update(
{"name":"A1", "addresses.add1":"a1"}, 
{$push:{ 
     "insertupdate":{"mode":"u","user":"xyz"}, 
     "addresses.$.insertupdate":{"mode":"u","user":"xyz"} 
     } 
}) 

答えて

0

私の質問のいずれかで、コメントが答えmongodb update using positional operator $ removes other fields :

db.names.update({name:"A1",addresses.add1:"a1"}, 
{ 
$set : { 
     "addresses.$.add2" : "a5"   
     }, 
$push : { 
    "insertupdate" : {"mode":"u","user":"xyz"}, 
    "addresses.$.insertupdate" : {"mode":"u","user":"xyz"} 
     } 
} 
); 
に私を指摘しました
関連する問題