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;
}
をしかし、これは私が追跡したい各フィールド名のカスタムセッターを必要とする意味:現在、私は、セッターにには、このどのハードコードフィールド名のようなものをやって残っています。私はこれを達成するためのより良い方法がなければならないと思っています。
modifiedPathsを使用して以前の値をどのように取得しましたか? –
@ Totty.jsこの問題を抱えている人にとって、現在mongooseは古い値を自動的に追跡しませんが、ここでは1つの解決策があります:https://pste.me/#/FU1Kg – helion3
@ helion3はリンクが古くなっているようです –