MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose:atomisches FindOne-Or-Insert(), vorhandene Instanz nicht aktualisieren, falls gefunden

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.