10
votes

Schéma de mangouste

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?

J'ai été autour du Documentation Mongoose mais ne trouve pas ce que je recherche.


0 commentaires

4 Réponses :


3
votes

Définissez le champ comme un Virtual getter au lieu d'un champ traditionnel.

Par exemple, disons que vous vouliez créer le champ POP de votre collection en lecture seule lorsqu'il est accédé via mongoose: xxx

en accédant au privé _DOC 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.


2 commentaires

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 est déjà là, il fonctionne car le document brut est disponible via le champ (non documenté) _doc .



16
votes

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; }
});


2 commentaires

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 in setters pour une requête ( FindByDandupdate dans votre cas) fait référence à la requête et non au document. Voir le dernier bit de la documentation de SET .



0
votes

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'
});


0 commentaires

2
votes

Depuis Mongoose 5.6, vous pouvez faire: immuable: true xxx


0 commentaires