Você pode usar
$setOnInsert
no seu parâmetro de atualização para que ele seja aplicado apenas no caso de inserção; com a atualização se tornando um no-op no caso de o documento já existir: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 }
)
Observe que você também deve criar um índice exclusivo sobre os campos incluídos em seu
filter
e, em seguida, lidar com a possibilidade de um erro duplicado. Veja esta postagem
para os detalhes por que.