2013-02-04 20 views
10

Nel mio modello di mangusta, ho alcuni stats che dipendono dal tempo. La mia idea è di aggiungere un middleware per modificare queste statistiche subito dopo il caricamento del modello.Modificare i valori del modello dopo il caricamento in Mongoose

Sfortunatamente, la documentazione su post -Hooks è un po 'carente in chiarezza. Sembra che posso usare un gancio come questo:

schema.post('init', function(doc) { 
    doc.foo = 'bar'; 
    return doc; 
}); 

I loro unici esempi coinvolgono console.log -outputs. Non spiega in alcun modo se è necessario restituire doc o se una modifica nel post-Hook è impossibile (poiché non è asincrona, potrebbe essere poco utile per idee complesse).

Se lo pre su 'init' non è il modo giusto per aggiornare automaticamente un modello al caricamento, allora che cos'è?

risposta

16

Questo è il modo in cui aggiorniamo modelli attualmente in carico, in modo asincrono:

schema.pre('init', function(next, data) { 
    data.property = data.property || 'someDefault'; 
    next(); 
}); 

Pre-init è speciale, gli altri ganci hanno una firma leggermente diverso, ad esempio pre-save:

schema.pre('save', function(next) { 
    this.accessed_ts = Date.now(); 
    next(); 
}); 
+2

Quindi pre-init è in realtà dopo che i dati sono stati caricati? E il documento non è nel contesto di 'this'? – Lanbo

+3

Pre-init è dopo che i dati sono stati caricati, ma * prima * il documento è idratato con quei dati (afaik). Poiché i dati non sono ancora stati inseriti nel documento, esiste il contesto "questo" (è ancora il documento) ma sarà vuoto (iirc). – hunterloftis

+0

Vorrei che i dottori lo spiegassero. – binki

Problemi correlati