MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB:WriteResult.getN() gibt immer 0 zurück?

Ich hatte den Eindruck, dass dies das normale MongoDB-Verhalten ist und nichts mit dem Java-Treiber zu tun hat.

Das einzige, was ich in der Dokumentation finden kann, ist dies :

Ein insert weder ein update sein noch ein remove , n scheint nicht angegeben zu sein und 0 ist ein ebenso guter Standardwert wie jeder andere. Sie können es ganz einfach in der Mongo-Shell überprüfen:

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

Wenn ich mich nicht irre, ist es kein wirkliches Problem:Fragen Sie sich, unter welchen Umständen das Einfügen fehlschlagen würde (anders als beispielsweise ein Verbindungsfehler). Die einzige, die mir einfällt, ist eine Verletzung der Eindeutigkeitsbeschränkung, die zu einer Ausnahme führen würde. Also fast per Definition die Tatsache, dass Sie ein WriteResult erhalten Instanz bedeutet, dass der Vorgang erfolgreich war und ein Dokument eingefügt wurde.

Ein paar Anmerkungen:

  • mein vorheriges Argument hängt von Ihrem WriteConcern ab hoch genug sein, dass Fehler gemeldet werden. Wenn Sie WriteConcern.NONE verwenden wird zum Beispiel niemals eine Ausnahme ausgelöst.
  • wenn die Anzahl der aktualisierten Dokumente für Sie ein absolutes Muss ist, können Sie jederzeit save verwenden statt insert . Nicht sehr sauber, aber es verhält sich wie erwartet.