根据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字段,但是当存在访问密钥时,请附加上述访问密钥到现有的。
答案 0 :(得分:1)
您可以使用$push运算符,该运算符会将新项目追加到现有数组中。您也可以将其用于没有accessKeys
字段的文档-在这种情况下,将创建单个元素数组:
db.col.update(
{"_id": ObjectId("58dc9feca463e61042d2e462")},
{ $push: {
"accessKeys": {"keyId": "50fcb190-5636-11e7-855a-0d21d5eb6743", "name": "Standard Key", "rights": ["Update"]}
}
})