如何在MongoDB中更新文档内嵌数组内所有对象的price字段值
解决方案
你可以使用MongoDB提供的全数组 positional 操作符 $[] 实现需求,该操作符支持MongoDB 3.6及以上版本,会匹配数组中的所有元素进行更新。
单个目标文档更新(按示例中的_id匹配)
db.yourCollectionName.updateOne( { "_id": ObjectId("123456789") }, { $set: { "items.$[].price": 50 } } )
批量更新所有符合条件的文档
如果你需要更新集合中所有文档的items数组内的price字段,使用updateMany:
db.yourCollectionName.updateMany( {}, { $set: { "items.$[].price": 50 } } )
低版本兼容方案(MongoDB 3.6以下)
如果使用的是不支持$[]的旧版本,可以先查询出目标文档,遍历修改items数组后再保存:
const targetDoc = db.yourCollectionName.findOne({ "_id": ObjectId("123456789") }) targetDoc.items.forEach(item => item.price = 50) db.yourCollectionName.save(targetDoc)
注意该方法是读改写的非原子操作,高并发场景下可能存在数据不一致问题,建议优先升级MongoDB版本使用$[]方案。
内容的提问来源于stack exchange,提问作者dmitry123321
相关产品推荐
相关产品推荐

