2015-01-04 58 views
4

我正在嘗試查找對象是否在預保存中更改並相應地執行一些操作。 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!

+0

可能重複?](http://stackoverflow.com/questions/10487702/does-mongoose-have-an-isdirty-check) –

+0

目前尚不清楚我們如何提供解決方案? – raju

回答

8

首先,您根本不需要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 
} 
的[不鼬有isDirty檢查
+0

是的,通常它是有道理的,但在我的例子中確實this._original不是null。我能夠打印this_original並獲得舊值! – raju

+0

任何想法如何檢查對象變量?例如。 this.something.isModified()給我一個未定義的錯誤 – andersfylling

+0

@sciencefyll我已經更新了答案 –