node.js - Mongoose 在预保存 Hook 中获取数据库值

标签 node.js mongoose

我想知道像这样的预保存 Mongoose 钩子(Hook)中脏 Prop 的“干净”值(value)是什么:

UserSchema.pre('save', function(next) {
    var user = this;

    if (user.isModified('password')){
       //i want to know what the value of user.password was before it was changed
    }
    next()
}

是否可以在不在数据库中查找的情况下查找旧值?

最佳答案

默认情况下,不存储旧值。您需要做的是使用 post init Hook ( Mongoose 功能)跟踪旧数据。

我们所做的是将原始文档的副本附加到从 MongoDB 中提取的所有项目。我们为每个需要获取预脏数据进行比较的模式编写了这段代码:

schema.post( 'init', function() {
    this._original = this.toObject();
} );

NodeJS 非常高效,并且在可能的情况下会在写入时进行复制,因此除非您修改整个文档,否则您不会看到双倍的内存消耗。只有这样,_original 才会实际消耗双倍的内存。

关于node.js - Mongoose 在预保存 Hook 中获取数据库值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18192804/

相关文章:

javascript - 解析 JSON 文件 - 子数组或方括号内的 node.js

javascript - 画一个箭头 HummusJS

javascript - 类型错误 : Cannot read property 'find' of undefined with mongoose

node.js - Mongoose 聚合返回空结果

node.js - 运行 `ng serve`后出现 `ng update @angular/cli @angular/core`错误,无法为Angular项目提供服务

javascript - 如何对对象中特定键的所有值求和?

javascript - 从 reddit URL 获取原始 URL

javascript - 使用 JADE 和 mongoose 对象时出错

javascript - 两个重复的 ID 字段(_id 和 id)自动填充

mongoose - 如何查询今天 `created`所在的所有数据(从00h :00m:00s to now) in mongoose?