sql >> Database >  >> NoSQL >> MongoDB

MongoDB:WriteResult.getN() retourneert altijd 0?

Ik had de indruk dat dit het normale MongoDB-gedrag was en niets te maken had met het Java-stuurprogramma.

Het enige dat ik in de documentatie kan vinden is dit :

Een insert geen update zijn noch een remove , n lijkt niet te zijn opgegeven en 0 is een even goede standaardwaarde als elke andere. Je kunt het gemakkelijk genoeg controleren in de mongo-schaal:

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

Tenzij ik me vergis, is het niet echt een probleem:vraag jezelf af onder welke omstandigheden de insert zou mislukken (behalve bijvoorbeeld een verbindingsfout). De enige die ik kan bedenken is een schending van de uniciteitsbeperking, wat zou resulteren in een uitzondering. Dus bijna per definitie, het feit dat u een WriteResult . ontvangt instantie betekent helemaal dat de bewerking is geslaagd en dat er een document is ingevoegd.

Een paar opmerkingen:

  • mijn vorige argument hangt af van uw WriteConcern hoog genoeg zijn om fouten te melden. Als u WriteConcern.NONE . gebruikt , er zal bijvoorbeeld nooit een uitzondering worden gemaakt.
  • als het aantal bijgewerkte documenten voor u een absolute must is, kunt u altijd save gebruiken in plaats van insert . Niet erg schoon, maar het gedraagt ​​zich zoals je lijkt te verwachten.


  1. Welsprekend buiten Laravel met jenssegers/laravel-mongodb meerdere DB-verbindingen

  2. Waar moet ik de --rest optie voor MongoDB toevoegen?

  3. docker-compose java-toepassingsverbinding met mongodb

  4. Probleem met Pymongo-machtigingen voor veilige invoegingen