sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB:WriteResult.getN() returnerer altid 0?

Jeg havde det indtryk, at dette var den normale MongoDB-adfærd og intet har at gøre med Java-driveren.

Det eneste jeg kan finde i dokumentationen er dette :

En insert er hverken en update heller ikke en remove , n synes ikke at være specificeret, og 0 er en lige så god standardværdi som nogen. Du kan nemt nok tjekke det i mongo-skallen:

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

Medmindre jeg tager fejl, er det egentlig ikke et problem:Spørg dig selv, under hvilke omstændigheder indsatsen ville fejle (bortset fra f.eks. en forbindelsesfejl). Den eneste, jeg kan komme i tanke om, er en overtrædelse af unicity-begrænsningen, som ville resultere i en undtagelse. Så næsten per definition, det faktum, at du modtager et WriteResult instans betyder overhovedet, at handlingen var vellykket, og et dokument blev indsat.

Et par bemærkninger:

  • mit tidligere argument afhænger af din WriteConcern høj nok til, at fejl rapporteres. Hvis du bruger WriteConcern.NONE f.eks. vil der aldrig blive rejst nogen undtagelse.
  • hvis antallet af opdaterede dokumenter er et absolut must for dig, kan du altid bruge save i stedet for insert . Ikke særlig ren, men den opfører sig, som du ser ud til at forvente.


  1. Gør mongoid-session skrivebeskyttet

  2. MongoDB forudindlæs dokumenter i RAM for bedre ydeevne

  3. JSON array konvertering til multidimension array

  4. Sådan omdøbes flere nøgler i Redis