如何在Mongoose中更新文档数组内指定对象的属性
实现方案
以下是MongoDB场景下的操作方法:
方案1:使用$占位符(适用单文档单匹配元素场景)
该方案适合只需要更新匹配到的第一个文档内的对应数组元素,代码示例:
db.你的集合名.updateOne( // 查询条件:匹配包含_id为5f5f1b的数组元素的文档 { "array._id": "5f5f1b" }, // 更新操作:$代表匹配到的第一个数组元素,直接修改对应属性 { $set: { "array.$.property": "000000" } } )
方案2:使用arrayFilters(适用多文档多匹配元素场景,MongoDB 3.6+支持)
如果需要更新所有文档中所有符合条件的数组元素,用该方案:
db.你的集合名.updateMany( // 此处可以添加文档级别的查询过滤条件,留空则匹配所有文档 {}, // $[elem]是占位符,对应arrayFilters里的过滤规则 { $set: { "array.$[elem].property": "000000" } }, { // 数组过滤规则:只处理_id为5f5f1b的数组元素 arrayFilters: [ { "elem._id": "5f5f1b" } ] } )
注意事项
- 如果你的数组元素
_id是ObjectId类型而非字符串,需要把查询条件里的"5f5f1b"替换为ObjectId("5f5f1b") updateOne只会修改匹配到的第一个文档,updateMany会修改所有符合条件的文档,可根据实际需求选择
内容的提问来源于stack exchange,提问作者Andrey
相关产品推荐
相关产品推荐

