使用位置运算符 $ 的 mongodb 更新删除其他字段: [英] mongodb update using positional operator $ removes other fields :

查看:54
本文介绍了使用位置运算符 $ 的 mongodb 更新删除其他字段:的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个架构(MongoDb:3.2.6):

I have this schema (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 为addresses.add1 = "a1" & 更新add2 字段name = "abcd" &保持 add1 &add3 个字段完好无损.

I am trying to update add2 field with a45 for addresses.add1 = "a1" & name = "abcd" & keep add1 & add3 fields intact.

我做了什么:

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 字段被移除.

i.e. add1 & add3 field got removed.

我没有自由在更新语句中添加每个字段.如何使用位置运算符 & 更新字段保持其他字段不变.

I don't have the liberty to add each field in update statement. How can i update fields using positional operator & keep other fields intact.

推荐答案

只是总结了评论中提到的解决方案,以供其他人使用.请使用点符号.示例如下:-

Just summarized the solution mentioned in the comment for others benefit. Please use dot notation. Sample below:-

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

这篇关于使用位置运算符 $ 的 mongodb 更新删除其他字段:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆