Puoi utilizzare $setOnInsert
nel parametro di aggiornamento in modo che si applichi solo nel caso di inserimento; con l'aggiornamento che diventa un no-op nel caso in cui il documento esiste già:
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 }
)
Tieni presente che dovresti anche creare un indice univoco sui campi inclusi nel tuo filter
e quindi gestire la possibilità di un errore duplicato. Vedi questo post
per i dettagli perché.