Node.js中如何使用查询得到的Mongoose文档实例执行更新操作
Mongoose 文档实例更新实现方案
你可以通过以下两种常用方式实现基于已有文档实例的更新操作:
方式1:修改实例属性后调用 save() 方法(最推荐,适配你的场景)
直接修改实例对应字段的值,再执行save()方法即可完成更新。该方式会触发Schema定义的pre('save')等中间件、字段校验规则,同时会提交你在业务逻辑中对该实例做的所有字段修改,符合你先基于实例做业务逻辑再更新的需求。
示例代码:
const user = await User.findById(userId) // ... 基于上述user实例实现业务逻辑 // ... 其他业务逻辑 // 直接修改实例属性 user.verified = true // 若有其他字段修改可同时赋值,例:user.lastLoginTime = new Date() // 执行保存 await user.save()
方式2:调用实例的 updateOne() 方法
如果更习惯用MongoDB更新操作符的写法,可以直接调用实例内置的updateOne方法,注意旧版Mongoose的update方法已废弃,不要继续使用。该方式只会执行你传入的更新语句,不会同步实例上未显式声明的修改,只会触发update相关的中间件。
示例代码:
const user = await User.findById(userId) // ... 基于上述user实例实现业务逻辑 // ... 其他业务逻辑 await user.updateOne({ $set: { verified: true } })
注意事项
- 两种更新操作都需要添加
await关键字,否则更新请求不会真正触发,也无法捕获执行错误。 - 存在并发更新场景时,可开启Schema的乐观锁配置(默认
versionKey: __v已启用),执行save时会自动校验版本号,避免覆盖其他请求的更新内容。
内容的提问来源于stack exchange,提问作者King Of Gotham
相关产品推荐
相关产品推荐

