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

Mongoose :Atomic FindOne-Or-Insert(), ne met pas à jour l'instance existante si elle est trouvée

Vous pouvez utiliser $setOnInsert dans votre paramètre de mise à jour afin qu'il ne s'applique qu'au cas d'insertion ; la mise à jour devenant un no-op dans le cas où le document existe déjà :

return await Foo.findOneAndUpdate(
  filter,                 // find a document with that filter
  {$setOnInsert: fooDoc}, // document to insert when nothing was found
  { upsert: true, new: true, runValidators: true }
)

Notez que vous devez également créer un index unique sur les champs inclus dans votre filter puis gérer la possibilité d'une erreur de duplication. Voir ce message pour les détails pourquoi.