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.