2012-03-11 11 views
5

Sto cercando di capire il modo migliore per tenere traccia delle modifiche ai campi quando si utilizza mongoose.js. Ad esempio, ogni volta che viene impostato il campo name su un oggetto, desidero aggiungere una nuova voce alla cronologia di tale oggetto (come documento incorporato) che assomigli a qualcosa come { field: 'name', previous: 'foo', current: 'bar', date: '3/06/2012 9:06 am' }.Monitoraggio delle modifiche ai campi utilizzando mongoose.js

Ho iniziato tentando di utilizzare un plug-in che aggancia lo .pre('save') ma non riesco a capire quali campi sono stati modificati senza prendere il vecchio valore dal database e confrontandoli da solo. Poi ho pensato che avrei potuto usare i setter personalizzati, ma mi sono imbattuto nello stesso problema - non so quale campo è stato modificato. Attualmente mi rimane fare qualcosa di simile che i codici duri il nome del campo in per il setter:

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; 
} 

Ma questo significa che ho bisogno di un setter personalizzato per ogni nome di campo che voglio monitorare. Immagino che ci debba essere un modo migliore per farlo.

risposta

4

Sembra che mi manchi "Document.modifiedPaths". Questo fa esattamente ciò di cui ho bisogno per determinare quali campi sono stati modificati.

+3

come hai ottenuto i vecchi valori usando solo i parametri modificati? –

+1

@ Totty.js Per chiunque si imbattesse in questa domanda, la mangusta al momento non traccia automaticamente i vecchi valori, ma ecco una soluzione: https://pste.me/#/FU1Kg – helion3

+0

@ helion3 sembra che quel link sia scaduto –

Problemi correlati