MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongoose:atomic FindOne-Or-Insert(), não atualize a instância existente se encontrada


Você pode usar $setOnInsert no seu parâmetro de atualização para que ele seja aplicado apenas no caso de inserção; com a atualização se tornando um no-op no caso de o documento já existir:
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 }
)

Observe que você também deve criar um índice exclusivo sobre os campos incluídos em seu filter e, em seguida, lidar com a possibilidade de um erro duplicado. Veja esta postagem para os detalhes por que.