MongoDB中如何单次更新多个嵌套子文档?
单个查询完成权限转移的实现方案
可以通过单个更新操作完成权限转移,利用MongoDB的$map操作符遍历employees数组,结合条件判断批量修改指定员工的权限值。
具体查询语句
db.managers.update( {}, { $set: { employees: { $map: { input: "$employees", as: "emp", in: { $cond: [ { $eq: ["$$emp.name", "Adam"] }, { name: "$$emp.name", _id: "$$emp._id", bananas: "not-allowed" }, { $cond: [ { $eq: ["$$emp.name", "Smith"] }, { name: "$$emp.name", _id: "$$emp._id", bananas: "allowed" }, "$$emp" ] } ] } } } } } )
操作说明
$map会遍历目标数组的每一个元素,通过嵌套的$cond做两次条件判断:- 匹配到Adam时,将其
bananas字段设为not-allowed - 匹配到Smith时,将其
bananas字段设为allowed - 其余员工的原有数据保持不变
- 匹配到Adam时,将其
- 该操作会一次性完成两个员工的权限修改,无需执行两次独立的更新命令
内容的提问来源于stack exchange,提问作者Fatih Ersoy
相关产品推荐
相关产品推荐

