MongoDb:更新记录&推送到阵列。无法同时更新'addresses.0'和'addresses.0.insertupdate'

时间:2016-06-24 05:49:29

标签: mongodb

我有一个带有此架构的名称集合。

    {
    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"
            }
   ]
  }

我要做的是:

我想更新记录add1 =“a1”as add2 =“a5”&在address.insertupdate和insertupdate中推送记录。

我尝试了什么:

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"}
        } 
 })

1 个答案:

答案 0 :(得分: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"}
       }
}
);