2012-10-30 6 views
20

bOświadczam wirtualny, że chcę pojawić się jako część wyników kwerend jego schematu, ale nie pojawia się, gdy robię konsole.log na obiekt. Oto schemat:Nie można uzyskać wirtualnych Mongoose jako części obiektu wynikowego

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

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

Czy to byObject nie ustawić wirtualny jako właściwość wyników jakichkolwiek zapytań? Nie ma ani schema.set ("toObject", {virtuals: true}). Czy robię to dobrze?

+0

Używam wersji 3.3.1. –

+0

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

+1

@MikePateras - czy to się udało? tak, jak? Mam dokładnie ten sam problem – Oddman

Odpowiedz

58

Ponieważ używasz JSON.stringify w Twoim zgłoszeniu console.log, które wywołuje metodę toJSON w instancji modelu, a nie toObject.

Więc albo pominąć JSON.stringify w wywołaniu:

console.log(results[0]); 

Albo ustawić opcję toJSON na schemacie jak aktualnie ustawienie opcji toObject.

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

Miałem ten sam problem przez co najmniej 2 dni - i nie kombinacja toObject/toJSON z włączonymi wirtualnymi działa. Po prostu nie można uzyskać wirtualne wyjścia. ja absolutnie batty! – Oddman

+3

Skończyło się na naprawie - nie wiedziałem, że potrzebuję obu tych właściwości, które mają być zdefiniowane. Dore mnie orzechy lol – Oddman

+2

Świetne pytanie, wspaniała odpowiedź.To powinno być zaakceptowane jako poprawne – Nate

1

Skończyłem tutaj robiąc coś naprawdę głupiego. Używałem Doc.find zamiast Doc.findOne, więc próbowałem uzyskać dostęp do wirtualnego w tablicy dokumentów, a nie w samym dokumencie.

Powiązane problemy