如何在MongoDB中将嵌套数组中所有items的qty设为0
正确更新MongoDB嵌套数组中所有元素属性的方法
你需要使用MongoDB的数组通配符操作符$[]来遍历嵌套数组的所有元素,原语句无法生效是因为直接通过路径services.items.qty只能更新嵌套数组中第一个匹配的元素,无法覆盖所有项。
正确的更新语句
db.collection.updateMany( {}, { $set: { "services.$[].items.$[].qty": 0 } } )
语句解释
services.$[]:匹配文档中services数组的每一个元素items.$[]:匹配每个service对象下items数组的每一个元素- 结合后,
$set会将所有嵌套items中的qty属性统一设置为0
可选的精准更新方式(如果需要条件匹配)
如果后续需要针对特定的service或item进行更新,可以使用带标识符的数组过滤器:
db.collection.updateMany( {}, { $set: { "services.$[service].items.$[item].qty": 0 } }, { arrayFilters: [ { "service.id": { $in: ["1", "2"] } }, // 仅匹配指定id的service { "item.id": { $exists: true } } // 匹配该service下所有item ] } )
内容的提问来源于stack exchange,提问作者Seerat Ahmed
相关产品推荐
相关产品推荐

