调用Mongoose的findByIdAndUpdate方法提示缺少模型绑定报错如何解决
问题定位
- 报错的核心原因是你调用
Model.findByIdAndUpdate()时错误添加了new关键字 findByIdAndUpdate属于Mongoose模型的静态方法,必须直接通过模型构造函数调用,添加new后会将方法作为实例构造函数执行,丢失了模型上下文绑定,因此抛出对应报错- 额外问题:你当前的写法没有处理
findByIdAndUpdate的异步逻辑,就算去掉new也拿不到更新后的文档数据
解决方案
修改更新操作的代码,调整异步逻辑即可,修改后的完整接口代码如下:
// 给处理函数添加async修饰,支持await异步调用 const usuariosPut = async (req = request, res = response) => { const {id} = req.params; const {password, google, correo, ...resto} = req.body; if (password) { const salt = bcryptjs.genSaltSync(); resto.password = bcryptjs.hashSync(password, salt); } // 去掉new关键字,添加await,补充常用配置项 const usuario = await Usuario.findByIdAndUpdate(id, resto, { new: true, // 配置返回更新后的文档,默认返回更新前的旧数据 runValidators: true // 配置触发Schema定义的字段规则校验,避免非法数据写入 }); res.json({ msg: 'put API - controlador', id, usuario }); }
内容的提问来源于stack exchange,提问作者Josue Medina
相关产品推荐
相关产品推荐

