如何在Mongoose中更新嵌套数组指定元素的commons字段并插入数据
Mongoose嵌套数组指定元素更新实现方案
问题原因
原有代码的核心错误在于$位置运算符的使用和更新字段路径错误:
- 位置运算符
$指代的是concernTo数组中第一个匹配过滤条件的元素的索引,直接放在数组名后即可,不需要嵌套在id字段后 - 错误的将数据推送到了
concernTo.id.$路径下,而非目标元素的commons字段 - 额外多包裹了一层
subComment,和预期的存储结构不符
正确实现代码
const obj = { to: "xyz", from: "abc" }; const filter = { renderId: "123456789", "concernTo.id": "snhdkjn786786" }; const update = { $push: { // $指代匹配到的concernTo数组元素的索引,直接定位到该元素的commons字段 "concernTo.$.commons": obj } }; const doc = await blogsCommentModel.findOneAndUpdate(filter, update, { returnOriginal: false }); console.log(doc);
补充说明
如果业务场景存在多个符合条件的concernTo元素需要批量更新,可以使用数组过滤标识符$[<identifier>]语法,示例如下:
const update = { $push: { "concernTo.$[item].commons": obj } }; const options = { returnOriginal: false, // 定义数组过滤条件,匹配所有id符合要求的元素 arrayFilters: [{ "item.id": "snhdkjn786786" }] }; const doc = await blogsCommentModel.findOneAndUpdate(filter, update, options);
内容的提问来源于stack exchange,提问作者akhileshsooji028
相关产品推荐
相关产品推荐

