Próbuję znaleźć najlepszy sposób śledzenia zmian na polach podczas korzystania z mongoose.js. Na przykład za każdym razem, gdy ustawione jest pole name
obiektu, chcę dodać nowy wpis do historii tego obiektu (jako dokumentu osadzonego), który wygląda podobnie do { field: 'name', previous: 'foo', current: 'bar', date: '3/06/2012 9:06 am' }
.Śledzenie zmian w polach za pomocą mongoose.js
Zacząłem od użycia wtyczki, która podpina .pre('save')
, ale nie mogę określić, które pola zostały zmodyfikowane bez pobierania starej wartości z bazy danych i porównywania ich samemu. Wtedy pomyślałem, że mogę użyć ustawiaczy niestandardowych, ale wpadłem na ten sam problem - nie wiem, które pole zostało zmodyfikowane. Obecnie pozostaje mi zrobić coś takiego które twardych kodów nazwa pola w celu ustawiająca:
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;
}
Ale to oznacza, że muszę niestandardowy setter dla każdej nazwy pola, że chcesz śledzić. Zgaduję, że musi istnieć lepszy sposób, aby to osiągnąć.
Skąd wzięły się stare wartości tylko za pomocą modifiedPaths? –
@ Totty.js Dla każdego, kto natknie się na to pytanie, mangusta obecnie nie śledzi starych wartości automatycznie, ale oto jedno rozwiązanie: https://pste.me/#/FU1Kg – helion3
@ helion3 wygląda na to, że ten link jest nieaktualny –