我的收藏上下文包含MongoDB中的以下文档(上下文有一些用户 角色)
{
"__v" : 0,
"_id" : ObjectId("53dea71a713d636e1fea705a"),
"name" : "team4",
"users" : [
{
"userId" : "53a347467f311d7c1731f91b",
"roles" : [
"admin"
]
},
{
"userId" : "536d2e8be0f9697e13b95c87",
"roles" : []
}
]
}
是否可以使用findAndModify向用户添加(或删除)角色。
答案 0 :(得分:4)
是的,这是可能的。您可以使用update和findAndModify命令执行此操作。
要为用户调用添加角色:
db.contexts.update({
_id: ObjectId('53dea71a713d636e1fea705a'),
'users.userId': '536d2e8be0f9697e13b95c87'
}, {
$push: {
'users.$.roles': 'admin'
}
})
要从用户来电中删除角色:
db.contexts.update({
_id: ObjectId('53dea71a713d636e1fea705a'),
'users.userId': '53a347467f311d7c1731f91b'
}, {
$pull: {
'users.$.roles': 'admin'
}
})
请注意,我使用positional operator $
指定了一个精确的user
子文档
更新
以下是将findAndModify
用于同一任务的示例:
db.contexts.findAndModify({
query: {
_id: ObjectId('53dea71a713d636e1fea705a'),
'users.userId': '536d2e8be0f9697e13b95c87'
},
update: {
$push: {
'users.$.roles': 'admin'
}
},
new: true
})
update
和findAndModify
命令之间唯一真正的区别是findAndModify
会返回修改后的文档,而update
只返回操作状态。
findAndModify
在单个事务中执行两个操作外, find
操作相当于调用update
和findAndModify
个操作。有关详细信息,请参阅this question。