sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB:WriteResult.getN() returnerar alltid 0?

Jag fick intrycket att detta var det normala MongoDB-beteendet och inte har något att göra med Java-drivrutinen.

Det enda jag kan hitta i dokumentationen är detta :

En insert är varken en update inte heller en remove , n verkar inte specificeras och 0 är ett lika bra standardvärde som något annat. Du kan kontrollera det enkelt nog i mongoskalet:

> db.test.insert({_id: 'test'})
> db.getLastErrorObj()
{ "n" : 0, "connectionId" : 7, "err" : null, "ok" : 1 }

Om jag inte har fel är det egentligen inget problem:fråga dig själv under vilka omständigheter insättningen skulle misslyckas (annat än, säg, ett anslutningsfel). Det enda jag kan komma på är ett brott mot unicity-begränsningen, vilket skulle resultera i ett undantag. Så nästan per definition, det faktum att du får ett WriteResult instans betyder överhuvudtaget att operationen lyckades och att ett dokument infogades.

Ett par anteckningar:

  • mitt tidigare argument beror på din WriteConcern är tillräckligt hög för att fel rapporteras. Om du använder WriteConcern.NONE , till exempel kommer inget undantag någonsin att tas upp.
  • om antalet uppdaterade dokument är ett absolut måste för dig kan du alltid använda save istället för insert . Inte särskilt rent, men det beter sig som du verkar förvänta dig.


  1. Sensitive Data Separation inom MongoDB och NodeJS - referenser via krypterad nyckel

  2. Flera nod-mongodb-native anslutningar

  3. Inuti Santanders nästan realtidsdataintagsarkitektur (del 2)

  4. Hur kör jag Redis på Windows?