Puede usar $setOnInsert
en su parámetro de actualización para que solo se aplique en el caso de inserción; con la actualización convirtiéndose en no operativa en el caso de que el documento ya exista:
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 }
)
Tenga en cuenta que también debe crear un índice único sobre los campos incluidos en su filter
y luego manejar la posibilidad de un error duplicado. Consulte esta publicación
para los detalles por qué.