2012-11-12 17 views
14

chcę dodać do danych w obie strony z kwerendy mangusty:Czy dane zwracane z Mongoose są niezmienne?

User.findById(userId, function(err, data) { 
    if (!err) { 
    data.newvar = 'Hello, world'; 
    } 
}); 

Jednak, kiedy pocieszyć zalogować się wydajnością, newvar nie istnieje. Próbowałem również tego, używając rozszerzenia podkreślenia:

_.extend(data, {'newvar': 'Hello, world'}); 

Bez powodzenia. Ponieważ mam zagnieżdżone dokumenty, użycie płytkiej kopii nie będzie działać. Czy istnieje tutaj sposób na dołączenie danych?

Odpowiedz

3

Jak się okazuje, dokumenty Mongoose są ich własną specjalną klasą, a nie standardowymi obiektami Javascript. Aby uzyskać opcję javascript, którą można rozszerzyć, należy użyć metody toObject().

+3

jestem jedynym myślenie nie powinno być wydane ostrzeżenie przy próbie i ustawić wartości? – backdesk

+0

Metoda .toObject() była dokładnie tym, czego potrzebowałem! – Aron

21

Jednym ze sposobów, aby obsłużyć to jest przekształcenie Mongoose instancji modelu do zwykłego obiektu, który ma pełną kontrolę nad nazywając toObject() na nim:

User.findById(userId, function(err, data) { 
    if (!err) { 
    data = data.toObject(); 
    data.newvar = 'Hello, world'; 
    } 
}); 

Jeśli chcesz bardziej uporządkowanego roztworu można dodać wirtualne atrybuty do swojego schematu zgodnie z opisem here.

+1

data.toObject(); Najważniejsze ... dobra odpowiedź. –

+0

Dzięki za to. Mijałem zapisy użytkowników od mangusty prosto do JWT, a pole "wydechowe" nie było stosowane z tego powodu. Bez ostrzeżenia ani niczego. – backdesk

Powiązane problemy