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

时间:2015-01-04 10:21:26

标签: node.js mongodb mongoose

我试图找到对象是否在预存储中更改并相应地执行某些操作。 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();
});

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

1 个答案:

答案 0 :(得分:20)

首先,您根本不需要original对象。您可以通过prethis挂钩中访问它。其次post挂钩仅在执行所有pre挂钩后执行,因此您的代码根本没有任何意义(check mongoose docs)。

您可以通过查看pre挂钩中的isModified进行检查,然后删除post挂钩。

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

<强>更新

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

if (this.isModified("some-property")) {
  // do something
}