sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB:WriteResult.getN() siempre devuelve 0?

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á utilizando WriteConcern.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 de insert . No muy limpio, pero se comporta de la manera que pareces esperar.