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

La valeur par défaut n'est pas définie lors de l'utilisation de la mise à jour avec Upsert comme vrai

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}, ...)