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

MongoDB用户与企业文档更新逻辑代码验证及修正问询

代码问题分析与修正

原代码核心问题

  • 错误使用find()方法:find()返回匹配文档的数组,无法直接访问_doc、id属性,会导致解构和ID获取操作报错。
  • User字段更新格式错误:{ companyAuthorised: {userToken}}会把字段设为对象类型,需求是存入字符串token,应直接赋值userToken。
  • CompanyUser数组更新逻辑错误:直接赋值teamMemberDetails.memberEmail会覆盖原有数组,需用MongoDB的$push操作符追加元素。
  • 缺失文档存在性校验:未判断查找的用户/企业是否存在,后续更新操作会无意义或报错。
  • 错误处理不严谨:内部try/catch仅打印模糊的"failure",无具体错误信息,也未向客户端返回对应错误响应,不利于调试。
  • Schema字段类型矛盾:CompanyProfileSchema中teamMembers定义为String类型,但默认值是数字0,类型不匹配,需修正为Number。

修正后的API代码

router.get('/inviteToJoinTeam/:token/:email', async (req, res) => {
  try {
    const { token: userToken, email: indivEmailAdd } = req.params;

    // 更新用户授权信息
    const userDetails = await User.findOne({ email: indivEmailAdd });
    if (!userDetails) {
      return res.status(404).send('未找到该用户');
    }
    await User.findByIdAndUpdate(userDetails._id, { companyAuthorised: userToken });

    // 更新企业团队成员列表
    const companyDetails = await CompanyUser.findOne({ inviteToken: userToken });
    if (!companyDetails) {
      return res.status(404).send('无效的企业邀请token');
    }
    await CompanyUser.findByIdAndUpdate(companyDetails._id, {
      $push: { "teamMemberDetails.memberEmail": indivEmailAdd },
      // 可选:同步更新团队成员数量
      $inc: { teamMembers: 1 }
    });

    res.status(200).send('团队成员邀请授权完成');
  } catch (e) {
    console.error('操作失败:', e);
    res.status(500).send('服务器内部错误');
  }
});

额外Schema修正建议

在CompanyProfileSchema中修正teamMembers字段类型:

teamMembers: {
  type: Number, 
  required: true, 
  default: 0
},

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:06:31