MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB :WriteResult.getN() renvoie toujours 0 ?

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 utilisez WriteConcern.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 de insert . Pas très propre, mais il se comporte comme vous semblez vous y attendre.