MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongoose:atomic FindOne-Or-Insert(), non aggiorna l'istanza esistente se trovata

Puoi utilizzare $setOnInsert nel parametro di aggiornamento in modo che si applichi solo nel caso di inserimento; con l'aggiornamento che diventa un no-op nel caso in cui il documento esiste già:

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 }
)

Tieni presente che dovresti anche creare un indice univoco sui campi inclusi nel tuo filter e quindi gestire la possibilità di un errore duplicato. Vedi questo post per i dettagli perché.