【问题标题】:Find if object is changed in pre-save hook mongoose查找对象是否在预保存钩子猫鼬中更改
【发布时间】:2016-04-21 19:39:30
【问题描述】:

我正在尝试查找对象是否在预保存中更改并相应地执行一些操作。 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!

【问题讨论】:

标签: node.js mongodb mongoose


【解决方案1】:

首先,您根本不需要original 对象。您可以通过thispre 挂钩中访问它。其次,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
}

【讨论】:

  • 是的,通常这是有道理的,但在我的示例中,this._original 确实不为空。我能够打印 this_original 并获得旧值!
  • 知道如何检查对象变量吗?例如。 this.something.isModified() 给了我一个未定义的错误
  • 你检查过它是否有效吗?因为我收到一个错误,而这篇文章另有说明:stackoverflow.com/questions/31173516/…
  • 文档和架构不共享相同的方法
猜你喜欢
  • 2018-03-04
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
相关资源
最近更新 更多