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

MongoDB/Node.js:向User模型courseId字段推送新ID并更新数据

实现将Course ID推送到User的courseId数组方案

你需要在完成Course的更新后,把当前Course的ID追加到指定User的courseId数组字段里对吧?这里给你调整一下路由代码,核心是在Course更新成功的回调中,调用User模型的更新方法,借助MongoDB的$push操作符完成数组元素的追加:

首先确保你已经在路由文件里引入了User模型(比如const User = require('../models/User')),然后修改路由代码如下:

router.post('/course/:userid/step-four/:courseid', function(req, res) {
  // 第一步:更新指定Course的信息
  Course.findByIdAndUpdate(
    req.params.courseid,
    req.body,
    { new: true }, // 该选项会返回更新后的最新文档,而非更新前的旧文档
    function(err, updatedCourse) {
      if (err) {
        return res.send(err); // 出现错误直接返回,避免后续无效执行
      }
      
      console.log("Course updated in step four");
      
      // 第二步:将当前Course的ID推送到对应User的courseId数组
      User.findByIdAndUpdate(
        req.params.userid,
        { $push: { courseId: req.params.courseid } }, // 用$push操作符向数组追加元素
        { new: true },
        function(userErr, updatedUser) {
          if (userErr) {
            return res.send(userErr);
          }
          
          // 可根据需求返回数据,比如同时返回更新后的Course和User
          res.send({
            course: updatedCourse,
            user: updatedUser
          });
        }
      );
    }
  );
});

关键细节说明:

  • 避免重复添加:如果需要防止同一个Course ID被多次添加到数组中,可以把$push替换成$addToSet,这样当数组中已存在该ID时,不会重复插入。
  • { new: true }参数:这个配置让Mongoose返回更新后的最新文档,方便你验证更新结果。
  • 错误分层处理:每个异步操作单独捕获错误,避免因某一步出错导致整个流程阻塞。

如果你偏好更简洁的异步写法(避免回调嵌套),可以改用async/await版本:

router.post('/course/:userid/step-four/:courseid', async function(req, res) {
  try {
    // 更新Course信息
    const updatedCourse = await Course.findByIdAndUpdate(
      req.params.courseid,
      req.body,
      { new: true }
    );
    
    console.log("Course updated in step four");
    
    // 更新User的courseId数组
    const updatedUser = await User.findByIdAndUpdate(
      req.params.userid,
      { $push: { courseId: req.params.courseid } },
      { new: true }
    );
    
    res.send({ course: updatedCourse, user: updatedUser });
  } catch (err) {
    res.send(err);
  }
});

内容的提问来源于stack exchange,提问作者Barry Bonds

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:29:40