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

如何通过Mongoose在MongoDB中为Course模型的指定Curriculum周添加Links对象

正确更新Curriculum中指定Week的Links数组的方法

你当前的代码存在两个关键问题:字段拼写错误和$push的目标路径不正确,下面是修正后的实现方案:

修正后的代码

const cour = await Course.findOneAndUpdate(
  { "curriculum._id": req.params.w }, // 修正拼写错误:caricullum → curriculum
  { 
    $push: {
      "curriculum.$.links": { // 使用$位置操作符定位匹配到的curriculum元素
        name: req.body.name,
        link: req.body.link,
        watched: false // 可选,schema中已设置默认值,省略后mongoose会自动填充
      }
    }
  },
  { new: true, runValidators: true } // 建议添加runValidators确保更新符合schema规则
);

关键细节解释

  1. 修正查询条件拼写:把错误的caricullum改成Schema中定义的curriculum,这样才能正确匹配到文档里的课程大纲数组元素。
  2. 使用$位置操作符:当查询条件匹配到数组中的某一个元素时,$会指代该元素在数组中的位置,"curriculum.$.links"就精准指向了目标week对象的links数组,确保新链接只被添加到指定的week下。
  3. 添加runValidators参数:开启这个参数可以让更新操作也遵循Schema的验证规则(比如字段类型、默认值等),避免存入不符合规范的数据。

额外补充

如果前端还会传入img字段,只需要在$push的对象中添加img: req.body.img即可,mongoose会自动处理watched这类有默认值的字段。

内容的提问来源于stack exchange,提问作者Suresh D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:57:39