Court et clair: est-il possible d'empêcher la définition d'un champ de schéma mais en permettant d'obtenir la valeur?champ sécurisé Mongoose Schema
J'ai été autour du Mongoose Documentation mais je ne trouve pas ce que je cherche.
Court et clair: est-il possible d'empêcher la définition d'un champ de schéma mais en permettant d'obtenir la valeur?champ sécurisé Mongoose Schema
J'ai été autour du Mongoose Documentation mais je ne trouve pas ce que je cherche.
Définissez le champ en tant que getter virtual au lieu d'un champ traditionnel.
Par exemple, supposons que vous vouliez rendre le champ pop
de votre collection en lecture seule quand on y accède via Mongoose:
var schema = new Schema({
city: String,
state: String
});
schema.virtual('pop').get(function() {
return this._doc.pop;
});
En accédant au membre _doc
privé de votre instance de modèle, il est possible que ce peut briser la l'avenir, mais cela a bien fonctionné quand je l'ai testé tout à l'heure.
Une alternative si vous souhaitez définir une valeur par défaut qui ne peut jamais être changé:
var schema = new Schema({
securedField: {
type: String,
default: 'Forever',
set: function (val) { return this.securedField; }
});
comment ça marche? les virtuals ne sont pas persistés, n'est-ce pas? – sidgate
@sidgate Ceci est une ancienne réponse et un peu un hack pour exposer un champ non défini dans le schéma, mais présent dans les documents sous-jacents. Donc vous avez raison que les virtuals ne sont pas persistés, mais puisque le champ 'pop' est déjà là, cela fonctionne car le document brut est disponible via le champ' _doc' (non documenté). – JohnnyHK