Du kan använda $setOnInsert
i din uppdateringsparameter så att den bara gäller i infogningsfallet; med uppdateringen blir en no-op i de fall där dokumentet redan finns:
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 }
)
Observera att du också bör skapa ett unikt index över fälten som ingår i ditt filter
och sedan hantera risken för ett dubblettfel. Se det här inlägget
för detaljerna varför.