2012-10-30 9 views
20

bI sto dichiarando un virtuale che voglio apparire come parte dei risultati delle query dello schema, ma non viene visualizzato quando eseguo un console.log su l'oggetto. Ecco lo schema:Impossibile ottenere i virtual Mongoose come parte dell'oggetto risultato

var schema = new mongoose.Schema(
{ 
    Name: { type: String } 
}, 
{ 
    toObject: { virtuals: true } 
}); 

schema.virtual("Greet").get(function() 
{ 
    return "My name is " + this.Name; 
}); 

caso che ToObject non impostare il virtuale come una proprietà dei risultati di tutte le domande? Non lo fa, né fa schema.set ("toObject", {virtuals: true}). Lo sto facendo bene?

+0

Sto usando la versione 3.3.1. –

+0

myModel.find ({}). Exec (funzione (err, risultati) { console.log (JSON.stringify (risultati [0])); } –

+1

@MikePateras - hai finito per farlo funzionare? ? quindi, come sto avendo esattamente lo stesso problema – Oddman

risposta

58

Poiché si sta usando JSON.stringify nella chiamata console.log, che richiama il metodo toJSON nell'istanza del modello, non toObject.

Quindi, o omette il JSON.stringify nella chiamata:

console.log(results[0]); 

o impostare l'opzione toJSON sullo schema come si sta attualmente impostando l'opzione toObject.

... 
{ 
    toObject: { virtuals: true }, 
    toJSON: { virtuals: true } 
}); 
+0

ho avuto questo stesso problema per almeno 2 giorni -... e nessuna combinazione di ToObject/toJSON con virtuals abilitato ha lavorato io proprio non riesco a virtuals uscita di guida ! mi assolutamente Batty – Oddman

+3

ho finito per risolverlo - non ero a conoscenza che mi serviva entrambe queste proprietà da definire mi faceva noci lol – Oddman

+2

grande questione; grande risposta Questo dovrebbe essere accettato come corretta – Nate

1

Sono finito qui facendo qualcosa di veramente stupido. Stavo usando Doc.find invece di Doc.findOne e così stavo cercando di accedere al virtuale sull'array di documenti anziché sul documento stesso.

Problemi correlati