J'avais l'impression que c'était le comportement normal de MongoDB et que cela n'avait rien à voir avec le pilote Java.
La seule chose que je peux trouver dans la documentation est ceci :
Un insert
n'étant ni une update
ni un remove
, n
ne semble pas être spécifié et 0 est une valeur par défaut aussi bonne que n'importe quelle autre. Vous pouvez le vérifier assez facilement dans le shell mongo :
> db.test.insert({_id: 'test'})
> db.getLastErrorObj()
{ "n" : 0, "connectionId" : 7, "err" : null, "ok" : 1 }
Sauf erreur de ma part, ce n'est pas vraiment un problème :demandez-vous dans quelles circonstances l'insert échouerait (autre que, disons, un échec de connexion). Le seul auquel je puisse penser est une violation de contrainte d'unicité, qui entraînerait une exception. Donc presque par définition, le fait que vous receviez un WriteResult
instance signifie que l'opération a réussi et qu'un document a été inséré.
Quelques remarques :
- mon argument précédent dépend de votre
WriteConcern
étant suffisamment élevé pour que des erreurs soient signalées. Si vous utilisezWriteConcern.NONE
, par exemple, aucune exception ne sera jamais levée. - si le nombre de documents mis à jour est un impératif absolu pour vous, vous pouvez toujours utiliser
save
au lieu deinsert
. Pas très propre, mais il se comporte comme vous semblez vous y attendre.