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

MongoDB:WriteResult.getN() sempre retorna 0?


Fiquei com a impressão de que esse era o comportamento normal do MongoDB e não tem nada a ver com o driver Java.

A única coisa que posso encontrar na documentação é isto :

Um insert não sendo uma update nem um remove , n não parece ser especificado e 0 é um valor padrão tão bom quanto qualquer outro. Você pode verificá-lo facilmente no shell do mongo:
> db.test.insert({_id: 'test'})
> db.getLastErrorObj()
{ "n" : 0, "connectionId" : 7, "err" : null, "ok" : 1 }

A menos que eu esteja enganado, não é realmente um problema:pergunte a si mesmo em quais circunstâncias a inserção falharia (além de, digamos, uma falha de conexão). A única em que consigo pensar é uma violação de restrição de unicidade, o que resultaria em uma exceção. Então, quase por definição, o fato de você receber um WriteResult instância significa que a operação foi bem-sucedida e um documento foi inserido.

Algumas notas:
  • meu argumento anterior depende do seu WriteConcern sendo alto o suficiente para que os erros sejam relatados. Se você estiver usando WriteConcern.NONE , por exemplo, nenhuma exceção será gerada.
  • se o número de documentos atualizados for uma necessidade absoluta para você, você sempre pode usar save em vez de insert . Não é muito limpo, mas se comporta da maneira que você espera.