我有一个带有此架构的名称集合。
{
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"}
}
})
答案 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"}
}
}
);