MongoDB批量更新文档数组指定元素Unit字段的正确脚本求助
正确的MongoDB数组更新脚本
现有MongoDB文档结构:
"ParentType" : { "Food" : null, "Inventory" : [ { "InvId":"5ea11c6569fdbb3728133c4c", "Unit" : "", "Price" :5.0 }, { "InvId":"5ea11c6569fdbb3728133c4d", "Unit" : "Liter", "Price" :10.0 }, { "InvId":"5ea11c6569fdbb3728133c4e", "Unit" : "", "Price" :12.0 } ] }
需求:将Inventory数组中所有Unit字段为空字符串("")的元素,其Unit值更新为"Number"。
你之前的脚本存在两个问题:
- 查询条件中错误使用了数组过滤器的占位符
$[element],该占位符仅能用于更新操作符的路径,不能放在查询条件里 - 缺少批量更新的参数,默认情况下
update只会修改第一个匹配的文档
正确脚本(推荐使用updateMany)
db.Inv.updateMany( {}, // 空查询匹配所有文档,若只想匹配存在空Unit的文档,可改为 {"ParentType.Inventory.Unit": ""} { $set: {"ParentType.Inventory.$[element].Unit": "Number"} }, { arrayFilters: [{"element.Unit": ""}], } );
或者使用update语法(需指定multi: true)
db.Inv.update( {}, { $set: {"ParentType.Inventory.$[element].Unit": "Number"} }, { arrayFilters: [{"element.Unit": ""}], multi: true } );
说明:
arrayFilters中的{"element.Unit": ""}会精准筛选出数组中Unit为空的元素updateMany默认会更新所有匹配的文档,无需额外指定multi: true;而update需要显式声明该参数才能批量更新
内容的提问来源于stack exchange,提问作者Anjana Padmesh
相关产品推荐
相关产品推荐

