如何用Mongoose向MongoDB的数字ID数组字段添加元素?
解决MongoDB数组字段追加元素的问题
你当前直接给appliedIds赋值的写法会覆盖整个数组,要实现仅向数组追加新元素,需要使用MongoDB的数组更新操作符,以下是两种常用方案:
方案1:允许数组存在重复元素(直接追加)
使用$push操作符,不管元素是否已存在,直接添加到数组末尾:
const updatedUser = await User.findOneAndUpdate( { id: req.body.applicantId }, { $push: { appliedIds: parseInt(req.params.id) } }, { new: true } // 可选,返回更新后的文档 );
方案2:禁止数组存在重复元素(避免重复投递)
使用$addToSet操作符,仅当元素不存在于数组中时才添加,适合求职场景防止重复投递:
const updatedUser = await User.findOneAndUpdate( { id: req.body.applicantId }, { $addToSet: { appliedIds: parseInt(req.params.id) } }, { new: true } // 可选,返回更新后的文档 );
注意事项
req.params.id是字符串类型,而你的appliedIds定义为[Number]数组,必须用parseInt()做类型转换,否则会存入字符串元素导致类型不匹配{ new: true }参数可选,若设置则返回更新后的用户文档,否则返回更新前的原始文档
完整修改后的处理函数示例:
router.route('/myCustomRoute/:id/apply') .post(async (req, res) => { // 更新Job的applicants数组(保留原逻辑,用$addToSet避免重复) const { nModified } = await Job.updateOne( { id: req.params.id }, { $addToSet: { applicants: req.body.applicantId } } ); // 更新User的appliedIds数组,追加新的职位ID const updatedUser = await User.findOneAndUpdate( { id: req.body.applicantId }, { $addToSet: { appliedIds: parseInt(req.params.id) } }, { new: true } ); res.status(200).json({ success: true, updatedUser, jobModifiedCount: nModified }); });
内容的提问来源于stack exchange,提问作者vbotio
相关产品推荐
相关产品推荐

