Node.js开发MongoDB CRUD应用更新时触发_id不可修改报错如何解决
错误原因
你触发这个报错的核心问题是:调用new Employee()创建新的Mongoose模型实例时,Mongoose会自动为这个新实例生成一个全新的_id字段。你把这个带了新_id的实例作为$set的参数传入更新方法,就等于试图修改原有数据的不可变字段_id,MongoDB不允许修改_id,因此直接抛出错误。
修复方案
不需要创建新的Employee实例,直接把需要更新的字段组成普通对象传给更新方法即可,修改后的代码如下:
router.put('/api/employee/edit/:id' ,(req,res) =>{ // 直接构造更新字段的普通对象,不要new Employee实例 const updateData = { name: req.body.name, email: req.body.email, salary: req.body.salary }; Employee.findByIdAndUpdate(req.params.id, {$set: updateData}, {new: true}, (err,data) => { if(!err){ res.status(200).json({ code:200, message:"Employee updated successfully", updateEmployee: data }) } else{ console.log(err); res.status(500).json({code:500, message:"更新失败"}) } }) })
补充说明:上面的代码额外加了
{new: true}配置项,加了之后返回的data就是更新后的最新数据,默认返回的是更新前的旧数据,可以根据你的业务需求决定是否保留。
内容的提问来源于stack exchange,提问作者Noob Master
相关产品推荐
相关产品推荐

