Tenía la impresión de que este era el comportamiento normal de MongoDB y no tiene nada que ver con el controlador de Java.
Lo único que puedo encontrar en la documentación es esto :
Un insert
no siendo ni una update
ni un remove
, n
no parece estar especificado y 0 es un valor predeterminado tan bueno como cualquier otro. Puede verificarlo con bastante facilidad en el shell de mongo:
> db.test.insert({_id: 'test'})
> db.getLastErrorObj()
{ "n" : 0, "connectionId" : 7, "err" : null, "ok" : 1 }
A menos que me equivoque, no es realmente un problema:pregúntese bajo qué circunstancias fallaría la inserción (aparte de, digamos, una falla de conexión). El único en el que puedo pensar es en una violación de la restricción de unicidad, lo que daría como resultado una excepción. Entonces, casi por definición, el hecho de que reciba un WriteResult
instancia en absoluto significa que la operación fue exitosa y se insertó un documento.
Un par de notas:
- mi argumento anterior depende de su
WriteConcern
siendo lo suficientemente alto como para que se informen los errores. Si está utilizandoWriteConcern.NONE
, por ejemplo, nunca se generará ninguna excepción. - si la cantidad de documentos actualizados es una necesidad absoluta para usted, siempre puede usar
save
en lugar deinsert
. No muy limpio, pero se comporta de la manera que pareces esperar.