2012-03-11 15 views
5

mongoose.jsを使用するときに、フィールドの変更を追跡する最適な方法を見つけようとしています。たとえば、オブジェクトのnameフィールドが設定されるたびに、{ field: 'name', previous: 'foo', current: 'bar', date: '3/06/2012 9:06 am' }のようなオブジェクトの履歴(埋め込みドキュメントとして)に新しいエントリを追加したいとします。mongoose.jsを使用してフィールドへの変更を追跡する

私は、.pre('save')をフックするプラグインを使用しようとしましたが、データベースから古い値を取得してそれらを自分で比較することなく、どのフィールドが変更されたのかわかりません。それから私はカスタムセッターを使うことができると思ったが、私は同じ問題に遭遇した。変更されたフィールドは分からない。

var comment = new Schema({ 
    name : { type: String, set: trackName }, 
    history : [Change] 
}); 

var trackName = function(val) { 
    var change = new Change; 
    change.field = 'name'; 
    change.previous = this.name; 
    change.current = val; 
    change.date = Date.now(); 
    this.history.push(change); 
    return val; 
} 

をしかし、これは私が追跡したい各フィールド名のカスタムセッターを必要とする意味:現在、私は、セッターにには、このどのハードコードフィールド名のようなものをやって残っています。私はこれを達成するためのより良い方法がなければならないと思っています。

答えて

4

「Document.modifiedPaths」が見つかりませんでした。これは、どのフィールドが変更されたかを判断するために必要なものです。

+3

modifiedPathsを使用して以前の値をどのように取得しましたか? –

+1

@ Totty.jsこの問題を抱えている人にとって、現在mongooseは古い値を自動的に追跡しませんが、ここでは1つの解決策があります:https://pste.me/#/FU1Kg – helion3

+0

@ helion3はリンクが古くなっているようです –

関連する問題