首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在MongoDB中向嵌套子文档数组添加新属性

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

Stack Overflow用户
提问于 2015-07-13 14:13:22
回答 1查看 2.4K关注 0票数 0
代码语言:javascript
运行
复制
{
    "_id" : ObjectId("559f85351554febf038b5c70"),
    "company_name" : "Honey Crunch Popcorn Co",
    "tech" : [
        {
            "tech_name" : "Magento",
            "user" : "Rahul",
        },
        {
            "tech_name" : "Volusion",
            "user" : "Tina",
        }
    ]
}

我想在"tech_name“:"Volusion”的"tech“数组中添加新的属性”验证:真“,这样就会产生这样的结果,

代码语言:javascript
运行
复制
{
    "_id" : ObjectId("559f85351554febf038b5c70"),
    "company_name" : "Honey Crunch Popcorn Co",
    "tech" : [
        {
            "tech_name" : "Magento",
              "user" : "Rahul"
        },
        {
            "tech_name" : "Volusion",
            "user" : "Tina",
            "verified" : "true"
        }
    ]
}

请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-13 15:12:50

为此,在update语句中使用$set操作符,同时通过运算符引用匹配的数组元素。

代码语言:javascript
运行
复制
db.collection.update(
    {
        "_id": ObjectId("559f85351554febf038b5c70"),
        "tech.tech_name": "Volution"
    },
    {
        "$set": {
            "tech.$.verified": true
        }
    }
)

所以这样做是为了:

  1. .update()的“查询”或第一个参数部分通过字段引用找到唯一的文档(不是真正必需的),其次在嵌套数组my自身匹配的" field /property“中找到一个字段。这最后一部分对下一阶段很重要。
  2. 这里,.update()方法的"update“部分作为”第二个“参数包含了”被修改的内容“的定义。这里使用$set运算符可以确保只以任何方式修改引用的字段。 然后,这里的“位置”$运算符确保只有从查询部分引用的数组元素的“匹配索引”才是更新的元素。这使用“点符号”形式的 $set:{ "tech.$.verified":true } 它引用元素中的“正确”索引字段,并在不存在或以其他方式“覆盖”现有值的情况下“创建”一个新属性。

这些都是如何工作的基本知识。从这里取走的主要东西是:

  1. 匹配要更新的数组中元素的索引值,并通过“点符号”引用它。
  2. 对字段使用$set操作或其他适当的“更新操作员”,而不是在"update“中提供”原始“对象结构,否则会”覆盖“现有对象。
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31385756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档