如何使用JavaScript在MongoDB中更新指定条件的子数组元素
首先注意 findByIdAndUpdate 第一个参数需要传入文档ID,你示例中传整个old文档是不符合要求的,直接传入最开始的sportId或者old._id即可。
[LOGIC] 位置需要填入MongoDB的更新操作语句,搭配arrayFilters配置项实现数组元素的条件更新,完整的代码写法如下:
const updated = await Sports.findByIdAndUpdate( sportId, // 以下为[LOGIC]部分的内容 { $set: { "markets.$[target].enabled": false } }, // 配置项需要补充arrayFilters指定匹配规则 { new: true, arrayFilters: [ { "target.defId": "LOOKATME" } ] } );
逻辑说明
- 这里使用了MongoDB带条件的位置运算符
$[<标识符>],$[target]会匹配markets数组中满足arrayFilters定义规则的元素 arrayFilters里指定仅匹配defId为LOOKATME的数组元素,最终只会修改符合条件的元素的enabled字段为false
这种写法无需提前查询原文档,直接传入
sportId即可执行更新,减少一次数据库查询开销。
内容的提问来源于stack exchange,提问作者Netsu
相关产品推荐
相关产品推荐

