Pour ajouter des valeurs par défaut à votre document s'il a été créé avec findOneAndUpdate
(il n'existait pas avant la requête) et que vous n'avez pas fourni le champ dans la mise à jour, vous devez utiliser setDefaultsOnInsert
.
Lorsque upsert
et setDefaultsOnInsert
sont tous les deux true
, les valeurs par défaut seront définies si l'enregistrement n'est pas trouvé et qu'un nouveau est créé. Cela évite le flux de travail consistant à vérifier si l'enregistrement existe et, si ce n'est pas le cas, à en créer un nouveau avec 'save' juste pour s'assurer que les valeurs par défaut sont définies .
J'ai eu le même problème (enregistrement créé avec findOneAndUpdate
avec upsert: true
) et la valeur par défaut d'un champ n'a pas été ajoutée à l'enregistrement, même s'il se trouvait dans le schéma. Cela concerne uniquement l'ajout de valeurs par défaut lors de l'utilisation de findOneAndUpdate
pour créer des documents, pas pour sauter la mise à jour du champ 'créé'.
ex.
User.findOneAndUpdate({email: user.email}, user, {upsert: true, setDefaultsOnInsert:true}, ...)