如何批量修改MongoDB集合多层嵌套数组中active值为inactive
问题原因排查
你写的更新语句核心错误是更新操作符大小写错误:MongoDB的字段更新操作符是小写的$set,你写的$Set首字母大写,MongoDB无法识别该操作符,所以更新不会生效。
场景1:确认key为account的criteria的value数组只会有一个值,直接替换整个数组
修正操作符大小写即可达到你预期的效果,更推荐用updateMany替代update加multi: true,语义更清晰,效果完全一致:
db.getCollection('test').updateMany({}, { $set: {"menu.$[m].items.$[i].criteria.$[c].value": ["inactive"]} }, { arrayFilters: [ {"m.type": "1"}, {"i.key": "activity"}, {"c.key": "account"} ] })
场景2:value数组可能存在多个元素,仅需要替换数组中的active值、不改动其他元素
新增一层数组过滤器匹配value数组内的active值即可,适用范围更广:
db.getCollection('test').updateMany({}, { $set: {"menu.$[m].items.$[i].criteria.$[c].value.$[v]": "inactive"} }, { arrayFilters: [ {"m.type": "1"}, {"i.key": "activity"}, {"c.key": "account"}, {"v": "active"} ] })
内容的提问来源于stack exchange,提问作者Tamilselvan
相关产品推荐
相关产品推荐

