繁体   English   中英

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

[英]How to update an already existing field in MongoDB

根据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字段,但是当存在访问密钥时,请将上述访问密钥附加到现有的访问密钥上。

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

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

暂无
暂无

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

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