ho avuto l'impressione che questo era il normale comportamento MongoDB, e non ha nulla a fare con il driver Java.
L'unica cosa che posso trovare nella documentazione è this:
getLastError.n riporta il numero di documenti aggiornati o rimossi, se l'operazione precedente era un aggiornamento o rimuovere il funzionamento.
Un insert
essendo né un update
né remove
, n
non sembra essere specificato e 0 è un buon valore predefinito come qualsiasi. È possibile controllare abbastanza facilmente nella shell mongo:
> db.test.insert({_id: 'test'})
> db.getLastErrorObj()
{ "n" : 0, "connectionId" : 7, "err" : null, "ok" : 1 }
A meno che non mi sbaglio, non è davvero un problema: chiedetevi in quali circostanze l'inserto fallirebbe (altro rispetto, ad esempio, un errore di connessione). L'unica a cui riesco a pensare è una violazione del vincolo di unicità, che comporterebbe un'eccezione. Quindi, quasi per definizione, il fatto che tu riceva un'istanza WriteResult
significa che l'operazione è andata a buon fine e che è stato inserito un documento.
Un paio di note:
- mia tesi precedente cerniere sul tuo
WriteConcern
essere abbastanza alto che gli errori vengono segnalati. Ad esempio, se si utilizza WriteConcern.NONE
, non verrà mai generata alcuna eccezione.
- se il numero di documenti aggiornati è assolutamente necessario, è sempre possibile utilizzare
save
anziché insert
. Non molto pulito, ma si comporta come ti aspetti.
fonte
2013-09-06 14:19:38
Funziona correttamente. Quale versione di mongo stai usando? I documenti sono stati inseriti correttamente nel DB dopo questa operazione? – Buchi
sì i documenti sono stati inseriti correttamente! Versione Mongo: 2.2.2 –
Anche io trovo la stessa cosa. Restituisce 0. Vedi anche http: // StackOverflow.it/questions/10662858/mongodb-java-api-writeresultgetn – btiernay