Javascript Can';更新时,不要在updateOne钩子中设置新值

Javascript Can';更新时,不要在updateOne钩子中设置新值,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,我有一个user模式,当我向数据库添加一个新密码时,它会在pre(save)钩子中散列密码,但我想在更新时做同样的操作,但它会保存普通密码,而不是散列密码 这在创建新记录时效果很好 UserSchema.pre('save', async function (done) { if (this.isModified('password')) { const hashedPassword = await Password.hash(this.get('password')); t

我有一个
user
模式,当我向数据库添加一个新密码时,它会在
pre(save)
钩子中散列
密码,但我想在更新时做同样的操作,但它会保存普通密码,而不是散列密码

这在创建新记录时效果很好

UserSchema.pre('save', async function (done) {
  if (this.isModified('password')) {
    const hashedPassword = await Password.hash(this.get('password'));
    this.set('password', hashedPassword);
  }

  done(null);
});

但这并不奏效

UserSchema.pre('updateOne', async function (done) {
  const hashedPassword = await Password.hash(this.get('password'));
  this.set('password', hashedPassword);

  done(null);
});

注意:控制台中没有错误

如果您定义pre('updateOne')文档中间件,则这将是正在更新的文档。这是因为pre('updateOne')文档中间件钩住了文档#updateOne()而不是查询#updateOne(),所以它应该是

schema.pre('updateOne', { document: true, query: false }, function() { console.log('Updating'); })

如果您定义pre('updateOne')文档中间件,则这将是正在更新的文档。这是因为pre('updateOne')文档中间件钩住了文档#updateOne()而不是查询#updateOne(),所以它应该是

schema.pre('updateOne', { document: true, query: false }, function() { console.log('Updating'); })

如果您定义pre('updateOne')文档中间件,则这将是正在更新的文档。这是因为pre('updateOne')文档中间件与文档#updateOne()挂钩,而不是查询#updateOne(),所以它应该是schema.pre('updateOne',{document:true,Query:false},function(){console.log('updatement');}@Nonik仍然不起作用too@Nonik添加
this.save()
,添加它作为接受它的答案如果您定义了pre('updateOne')文档中间件,这将是正在更新的文档。这是因为pre('updateOne')文档中间件与文档#updateOne()挂钩,而不是查询#updateOne(),所以它应该是schema.pre('updateOne',{document:true,Query:false},function(){console.log('updatement');}@Nonik仍然不起作用too@Nonik添加
this.save()
,如果我能投两次票,我会……谢谢你如果我能投两次票,我会……谢谢你