mongodb update使用位置运算符$删除其他字段:

时间:2016-06-24 07:44:49

标签: mongodb

我有这个架构(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语句中添加每个字段。 如何使用位置运算符&更新字段?保持其他领域不变。

1 个答案:

答案 0 :(得分:0)

刚刚总结了评论中提到的解决方案,为其他人带来了好处。请使用点符号。以下示例: -

db.arrObject.update({ "name": "abcd", "addresses.add1": "a1" },{ "$set": {"addresses.$.add2": "a45" } })