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
相关产品推荐
相关产品推荐

