Voir les commentaires dans ce numéro:
null est une valeur valide pour une propriété Date, sauf si vous spécifiez required. Les valeurs par défaut ne sont définies que si la valeur est indéfinie, et non si elle est falsifiée.
(il s'agit de dates mais il peut aussi être appliqué aux nombres.)
Vos options sont soit:
- ajouter
required
au champ
- ajouter un validateur personnalisé qui rejeter
- utiliser des crochets/middleware pour résoudre le problème
Vous pourriez vous en sortir avec un crochet de pré-sauvegarde ou de post-validation (ou un autre) comme celui-ci:
YourCollection.pre('save', function (next) {
if (this.port === null) {
this.port = undefined;
}
next();
});
mais probablement vous devrez utiliser quelque chose comme:
YourCollection.pre('save', function (next) {
if (this.port === null) {
this.port = 1234; // get it from the schema object instead of hardcoding
}
next();
});
Voir aussi cette réponse pour quelques trucs sur la façon de faire null
déclencher des valeurs par défaut dans l'invocation de la fonction:
Ceci est dommage que Mongoose ne puisse pas être configuré pour marcher null
comme undefined
(avec un paramètre ou quelque chose comme ça « non nulle ») car il est parfois le cas que vous travaillez avec des données que vous avez une demande JSON et il peut parfois convertir undefined
null:
> JSON.parse(JSON.stringify([ undefined ]));
[ null ]
ou même ajouter des valeurs null
où il n'y avait pas (explicite) undefined
:
> JSON.parse(JSON.stringify([ 1,,2 ]));
[ 1, null, 2 ]
Il est plus d'un [artefact JavaScript] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/null) que les bases des "types" en mangouste sont basées. Cela dépend donc si vous pouvez soit vivre en lançant simplement une exception (ce que vous pouvez faire avec un simple validateur) soit en supplantant 'null' avec une valeur" par défaut "où il est fourni, ce qui est fait dans les crochets" pré ". . Ou assurez-vous plutôt que les entrées sont 'undefined' au lieu de' null', et que le "default" fonctionne comme prévu. –
Est-ce que [ma réponse] (https://stackoverflow.com/questions/45208127/mongoose-accepts-null-for-number-field/45211501#45211501) ci-dessous vous a aidé? Des commentaires? – rsp