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

MongoDB:WriteResult.getN() restituisce sempre 0?

Avevo l'impressione che questo fosse il normale comportamento di MongoDB e non avesse nulla a che fare con il driver Java.

L'unica cosa che posso trovare nella documentazione è questo :

Un insert non essendo né un update né una remove , n non sembra essere specificato e 0 è un valore predefinito buono come qualsiasi. Puoi controllarlo abbastanza facilmente nella mongo shell:

> db.test.insert({_id: 'test'})
> db.getLastErrorObj()
{ "n" : 0, "connectionId" : 7, "err" : null, "ok" : 1 }

A meno che non mi sbagli, non è davvero un problema:chiediti in quali circostanze l'inserto fallirebbe (a parte, diciamo, un errore di connessione). L'unico che mi viene in mente è una violazione del vincolo di unicità, che comporterebbe un'eccezione. Quindi, quasi per definizione, il fatto che tu riceva un WriteResult istanza significa che l'operazione è andata a buon fine ed è stato inserito un documento.

Un paio di note:

  • il mio precedente argomento dipende dal tuo WriteConcern essere sufficientemente alto da segnalare gli errori. Se stai usando WriteConcern.NONE , ad esempio, non verrà mai sollevata alcuna eccezione.
  • se il numero di documenti aggiornati è per te un must assoluto, puoi sempre utilizzare save invece di insert . Non molto pulito, ma si comporta come ti aspetteresti.