簡體   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