2012-11-25 11 views

Odpowiedz

2

Definiowanie pola jako obiektu pobierającego virtual zamiast tradycyjnego pola.

Na przykład, że chcesz, aby pole swojej kolekcji tylko do odczytu, gdy dostęp poprzez Mongoose pop:

var schema = new Schema({ 
    city: String, 
    state: String 
}); 

schema.virtual('pop').get(function() { 
    return this._doc.pop; 
}); 

Uzyskując dostęp do prywatnej _doc członek instancji modelu jest to możliwe, może to przerwa w przyszłości, ale działało to dobrze, kiedy testowałem to właśnie teraz.

+0

jak to działa? wirtualniki nie są zachowywane, prawda? – sidgate

+1

@sidgate To jest stara odpowiedź i trochę hack, aby odsłonić pole nie zdefiniowane w schemacie, ale obecne w podstawowych dokumentach. Tak więc masz rację, że wirtualności nie zostają utrwalone, ale ponieważ pole 'pop' już istnieje, działa tak, ponieważ surowy dokument jest dostępny za pośrednictwem pola (_ nieudokumentowanego)' _doc'. – JohnnyHK

11

Alternatywą jeśli chcesz ustawić wartość domyślną, która nigdy nie może być zmieniany:

var schema = new Schema({ 
    securedField: { 
    type: String, 
    default: 'Forever', 
    set: function (val) { return this.securedField; } 
}); 
Powiązane problemy