MongoDB updateOne仅更新数组首个匹配元素,如何批量更新所有匹配项?
解决MongoDB数组中所有匹配元素的更新问题
你当前的代码使用$elemMatch和位置操作符$时,只会对array_property中第一个匹配条件的元素执行$push操作,无法批量更新所有符合条件的元素。要实现更新所有匹配元素的需求,需要使用MongoDB的数组过滤更新操作符($[<identifier>]),配合arrayFilters参数指定匹配规则。
修正后的代码
await user.updateOne( { _id: user_id, "array_property._id": { $in: array_of_id } }, { $push: { "array_property.$[elem].img_array": { $each: [new_img] } } }, { arrayFilters: [{ "elem._id": { $in: array_of_id } }] } );
关键说明
- 移除原查询中的
$elemMatch,直接通过"array_property._id": { $in: array_of_id }定位目标文档。 - 使用
$[elem]作为数组元素的占位符,配合arrayFilters里的规则,会匹配array_property中所有_id在array_of_id内的元素。 - 执行
$push时,所有符合过滤条件的array_property元素的img_array都会被添加新的图片路径。
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

