court et clair: y a-t-il un moyen d'empêcher de définir un champ de schéma mais permettant d'obtenir la valeur? P>
J'ai été autour du Documentation Mongoose mais ne trouve pas ce que je recherche. p>
4 Réponses :
Définissez le champ comme un Virtual getter au lieu d'un champ traditionnel.
Par exemple, disons que vous vouliez créer le champ en accédant au privé POP CODE> de votre collection en lecture seule lorsqu'il est accédé via mongoose: p>
_DOC code> membre de votre instance de modèle, il est possible que cela puisse casser à l'avenir, mais cela a fonctionné bien lorsque je l'ai testé maintenant. P> P>
Comment cela marche-t-il? Les virtuelles ne sont pas persistées, non?
@Sidgate C'est une ancienne réponse et un peu de 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 virtuelles ne soient pas persistées, mais que le champ POP CODE> est déjà là, il fonctionne car le document brut est disponible via le champ (non documenté)
_doc code> .
Une alternative Si vous souhaitez définir une valeur par défaut qui ne peut jamais être modifiée:
var schema = new Schema({ securedField: { type: String, default: 'Forever', set: function (val) { return this.securedField; } });
Il n'apparaît plus que le fonctionnement de la valeur de Mongoose 5.0.15 a été correctement défini sur "Securedfield": "Forever" mais FindByIdandupdate (...) change.
@jfrbishow qui est dû à une modification de mangouste 5 où ceci code> in setters pour une requête (
FindByDandupdate code> dans votre cas) fait référence à la requête et non au document. Voir le dernier bit de la documentation de
SET CODE>
.
Vous pouvez simplement revenir de définir la même valeur que la valeur par défaut, il n'est pas nécessaire de référencer le document _Chis:
var schema = new Schema({ securedField: { type: String, default: 'Forever', set: () => 'Forever' });
Depuis Mongoose 5.6, vous pouvez faire: immuable: true code>