1

我的MongoDB 中有带有以下文档的 Collection上下文(上下文中有一些用户具有角色

{
    "__v" : 0,
    "_id" : ObjectId("53dea71a713d636e1fea705a"),
    "name" : "team4",
    "users" : [ 
        {
            "userId" : "53a347467f311d7c1731f91b",
            "roles" : [ 
                "admin"
            ]
        }, 
        {
            "userId" : "536d2e8be0f9697e13b95c87",
            "roles" : []
        }
    ]
}

有没有办法使用findAndModify用户添加(或删除)角色

4

1 回答 1

5

是的,这是可能的。您可以同时使用updatefindAndModify命令。

向用户调用添加角色:

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'
  }
})

请注意,我使用位置运算符$来指定user要更新的确切子文档。

以下是findAndModify用于同一任务的示例:

db.contexts.findAndModify({
  query: {
    _id: ObjectId('53dea71a713d636e1fea705a'),
    'users.userId': '536d2e8be0f9697e13b95c87'
  },
  update: {
    $push: {
      'users.$.roles': 'admin'
    }
  },
  new: true
})

updatefindAndModify命令之间唯一真正的区别是findAndModify返回修改后的文档,而update只返回操作状态。

findAndModifyoperation 等效于同时调用findandupdate操作,除了findAndModify在单个事务中执行这两个操作。有关详细信息,请参阅此问题

于 2014-08-18T12:14:43.367 回答