我有一个包含此模式的集合名称。
{
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“更新为add2 = "a5”&在addresses.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.
编辑:
这个命令是成功的。然而,它不会让我设定我的价值观。也就是说,我需要一种方法来使用集合&与位置操作符同时推送。
db.names.update(
{"name":"A1", "addresses.add1":"a1"},
{$push:{
"insertupdate":{"mode":"u","user":"xyz"},
"addresses.$.insertupdate":{"mode":"u","user":"xyz"}
}
})发布于 2016-06-24 08:09:09
在我的一个问题中有一条评论告诉我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"}
}
}
);https://stackoverflow.com/questions/38006383
复制相似问题