我在架构中的pre findOneAndUpdate不起作用
这是我当前无法使用的findOneAndUpdate(不执行任何操作)
userSchema.pre('findOneAndUpdate', function (next) {
this.update({}, { $set: { location: 'hey' } });
}
“ this”参数是类似于说明的here
的查询查询中间件与文档中间件的区别很细微,但 重要方式:在文档中间件中,这是指文档 正在更新。在查询中间件中,猫鼬不一定具有 对要更新的文档的引用,因此这是指查询 对象而不是要更新的文档。
这是我从this项目复制的更新函数:
async update(id, data) {
var filter = {};
filter[this.key] = id;
let updatedModel = await this.model.findOneAndUpdate(filter, data, { new: true });
if (!updatedModel) {
throw new Error(`update - not found ${id} for ${this.modelName}`);
}
}
这是我的架构:
let userSchema = new Schema({
first_name: { type: String },
last_name: { type: String },
username: { type: String, required: true, unique: true },
password: { type: String, required: true },
email: { type: String, required: true, unique: true },
admin: { type: Boolean, default: false },
location: String,
created_at: { type: Date, default: Date.now() },
last_login_at: { type: Date, default: Date.now() },
resetPasswordToken: String,
resetPasswordExpires: Date
});
我发现在更新时对密码进行哈希处理的唯一解决方案是在调用update方法之前对密码进行哈希处理,这是当前可接受的解决方案吗? 或者有什么变通办法可以让我在prefindOneAndUpdate上哈希密码