【发布时间】:2016-06-24 20:29:23
【问题描述】:
我有这个架构(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 字段已被删除。
我无权在更新语句中添加每个字段。 如何使用位置运算符更新字段并保持其他字段不变。
【问题讨论】:
-
请参阅this 并请在您的问题中添加列表而不是屏幕截图。谢谢。
-
您是否尝试过使用像
db.arrObject.update({ "name": "abcd", "addresses.add1": "a1" },{ "$set": {"addresses.$.add2": "a45" } })这样的点符号? -
@chridam 是的,我试过了,它有效。想知道语法的区别。
-
不同的是,问题中指定的查询实际上替换了数组的值,而注释中指定的查询找到了指定的键并替换了它的值,而其他字段保持不变。
标签: mongodb