我有这个架构(MongoDb:3.2.6):
> db.arrObject.find().pretty()
{
"_id" : ObjectId("576ce19479bd1761a560c14d"),
"name" : "abcd",
"addresses" : [
{ "add1" : "a1",
"add2" : "a2",
"add3" : "a3"
}
]
}
{
"_id" : ObjectId("576ce19e79bd1761a560c14e"),
"name" : "pqrs",
"addresses" : [
{
"add1" : "a1",
"add2" : "a2",
"add3" : "a3"
}
]
}
>
我要做的是:
我正在尝试使用a45更新add2字段,用于地址.add1 =“a1”& name =“abcd”&保持add1& add3字段完好无损。
我做了什么:
db.arrObject.update(
{"name":"abcd","addresses.add1":"a1"},
{$set:{"addresses.$" : {"add2":"a45"}}}
)
我获得了什么:
> db.arrObject.find().pretty()
{
"_id" : ObjectId("576ce19479bd1761a560c14d"),
"name" : "abcd",
"addresses" : [
{
"add2" : "a45"
}
]
}
{
"_id" : ObjectId("576ce19e79bd1761a560c14e"),
"name" : "pqrs",
"addresses" : [
{
"add1" : "a1",
"add2" : "a2",
"add3" : "a3"
}
]
}
>
即 add1& add3字段已删除。
我无权在update语句中添加每个字段。 如何使用位置运算符&更新字段?保持其他领域不变。
答案 0 :(得分:0)
刚刚总结了评论中提到的解决方案,为其他人带来了好处。请使用点符号。以下示例: -
db.arrObject.update({ "name": "abcd", "addresses.add1": "a1" },{ "$set": {"addresses.$.add2": "a45" } })