繁体   English   中英

如何在MongoDB中的嵌套子文档数组中添加新属性

[英]How to add new attribute to array of nested sub document in MongoDB

{
    "_id" : ObjectId("559f85351554febf038b5c70"),
    "company_name" : "Honey Crunch Popcorn Co",
    "tech" : [
        {
            "tech_name" : "Magento",
            "user" : "Rahul",
        },
        {
            "tech_name" : "Volusion",
            "user" : "Tina",
        }
    ]
}

我只想将新属性“ verified:true”添加到“ tech_name”:“ Volusion”的“ tech”数组中,这样就可以得到结果,

{
    "_id" : ObjectId("559f85351554febf038b5c70"),
    "company_name" : "Honey Crunch Popcorn Co",
    "tech" : [
        {
            "tech_name" : "Magento",
              "user" : "Rahul"
        },
        {
            "tech_name" : "Volusion",
            "user" : "Tina",
            "verified" : "true"
        }
    ]
}

请帮忙。

为此,您可以在update语句中使用$set运算符,同时通过位置$运算符引用匹配的数组元素:

db.collection.update(
    {
        "_id": ObjectId("559f85351554febf038b5c70"),
        "tech.tech_name": "Volution"
    },
    {
        "$set": {
            "tech.$.verified": true
        }
    }
)

所以这样做是:

  1. .update()的“查询”或第一个参数部分都通过字段引用找到唯一的文档(不是真正需要的),其次在嵌套数组中找到它自己的匹配“字段/属性”的字段。 最后一部分对于下一阶段很重要。

  2. .update()方法的“ update”部分.update()此处为“ second”参数)包含“修改内容”的定义。 在此处使用$set运算符可确保仅以任何方式修改引用的字段。

    然后,这里的“位置” $运算符可确保只有从查询部分引用的数组元素的“匹配索引”才是要更新的元素。 这使用了“点符号”形式

     $set: { "tech.$.verified": true } 

    这将引用元素中的“正确”索引字段,并“创建”一个不存在的新属性,否则将“覆盖”现有值。

这些是工作原理的基础。 从这里带走的主要事情是:

  1. 匹配要更新的数组中元素的索引值,并通过“点符号”对其进行引用。

  2. 对字段使用$set操作或其他适当的“更新运算符” ,而不要在“更新”中提供否则将“覆盖”现有对象的“原始”对象结构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM