Sie können $setOnInsert
verwenden
in Ihrem Update-Parameter, damit er nur im Insert-Fall gilt; wobei das Update zu einem No-Op wird, falls das Dokument bereits existiert:
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 }
)
Beachten Sie, dass Sie auch einen eindeutigen Index über die in Ihrem filter
enthaltenen Felder erstellen sollten und behandeln Sie dann die Möglichkeit eines doppelten Fehlers. Siehe diesen Beitrag
für die Details warum.