如何更新MongoDB中已经存在的字段

时间:2018-06-27 05:25:08

标签: javascript mongodb nosql

根据MongoDB文档,$set用指定的值替换字段的值,或者如果不存在该字段的值将添加具有指定值的新字段。我的问题是,如何在不替换现有行的情况下添加到现有行,例如:

{
    "_id" : ObjectId("58dc9feca463e61042d2e462"),
    "email" : "spguillen@yahoo.com",
    "accountType" : "admin",
    "accessKeys" : [
        {
            "keyId" : "d06e6640-2f98-11e7-810b-67d01c2ba6eb",
            "name" : "Admin Key",
            "rights" : [
                "Read",
                "Create",
                "Delete"
            ]
        }
    ]
}

我想在accessKeys字段中添加以下内容:

{"keyId": "50fcb190-5636-11e7-855a-0d21d5eb6743", "name": "Standard Key", "rights": ["Update"]}

无需覆盖现有的访问密钥。理想情况下,还要为 accountType:admin 的任何帐户设置一个条件,如果没有accessKeys,它将设置一个带有上方访问密钥的accessKey字段,但是当存在访问密钥时,请附加上述访问密钥到现有的。

1 个答案:

答案 0 :(得分:1)

您可以使用$push运算符,该运算符会将新项目追加到现有数组中。您也可以将其用于没有accessKeys字段的文档-在这种情况下,将创建单个元素数组:

db.col.update(
    {"_id": ObjectId("58dc9feca463e61042d2e462")}, 
    { $push: { 
        "accessKeys": {"keyId": "50fcb190-5636-11e7-855a-0d21d5eb6743", "name": "Standard Key", "rights": ["Update"]} 
    } 
})