You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:06:03