MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

L'upsert Mongoose ne crée pas la propriété de schéma par défaut

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( ...