查找是否在预保存挂钩mongoose中更改了对象

raj*_*aju 14 mongoose mongodb node.js

我试图找到是否在预保存中更改了对象并相应地执行了一些操作.Followinfg是我的代码

var eql = require("deep-eql");

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

OrderSchema.pre('save', function(next) {
    var original = this._original;

    delete this._original;
    if(eql(this, original)){
        //do some actions
    }
    next();
});
Run Code Online (Sandbox Code Playgroud)

即使我没有改变任何东西,它也会返回false!

Vse*_*nin 23

首先,您根本不需要该original对象.您可以pre通过钩子访问它this.其次,post只有在执行了所有pre挂钩之后才执行钩子,所以你的代码根本没有任何意义(检查mongoose docs).

您可以通过检查钩子进行检查isModified,pre然后取下post钩子.

OrderSchema.pre('save', function(next) {    
    if(!this.isModified()){
        //not modified
    }
    next();
});
Run Code Online (Sandbox Code Playgroud)

更新

为了检查某些属性是否被修改,将属性名称作为参数传递给isModified函数:

if (this.isModified("some-property")) {
  // do something
}
Run Code Online (Sandbox Code Playgroud)