Ce qui se passe, c'est qu'aucune des valeurs de validation, de middleware ou par défaut de Mongoose n'est utilisée lors de l'appel de l'une des familles de méthodes "update", comme findByIdAndUpdate . Ils ne sont invoqués que par des appels à save ou create .
La raison en est que les appels de "mise à jour" sont en fait des relais vers le pilote natif, Mongoose ne fournissant que le transtypage des champs en fonction de la définition du schéma.
Mise à jour Mongoose 4.0
Mongoose prend désormais en charge la définition des valeurs par défaut lorsqu'un nouveau document est créé lors d'une update , findOneAndUpdate , ou findByIdAndUpdate upsert. Définissez le setDefaultsOnInsert option sur true pour activer cela. Cela utilise le $setOnInsert opérateur pour créer les valeurs par défaut lors de l'insertion.
var queryOptions = {
upsert: true,
setDefaultsOnInsert: true
};
Company.findByIdAndUpdate(id, company, queryOptions).exec( ...