2012-05-19 10 views
10

Ich schreibe Java-Code mit MongoDB mit Java-API und ich bin unsicher von einem Teil des Javadoc.Mongodb Java API: WriteResult # getN()

In einem Multi-Thread-Kontext verwende ich DBCollection.html#update(com.mongodb.DBObject, com.mongodb.DBObject), um ein Dokument zu aktualisieren, aber ich sah, dass zwei Threads versuchen könnten, gleichzeitig zu schreiben. In diesem Zusammenhang habe ich beobachtet, dass nur ein Schreibvorgang durchgeführt wurde, da Mongodb eine optimistische Schreibsperre zu verwenden scheint, aber ich wollte programmatisch herausfinden, in welchem ​​Thread der Schreibvorgang derjenige war, der geschrieben hat und welcher nicht. Als „kein Update“ Verhalten still war (ich meine keine Ausnahme oder etwas), ich in die API einen Weg gesucht meine Frage zu beantworten und nach einigen Tests herausgefunden, diese Methode: WriteResult#getN()

public int getN() 
    Gets the "n" field 
    Returns: 

Die Beschreibung ist, hum ... nicht wirklich erschöpfend. Meine Tests zeigten, dass der Thread, der den Schreibvorgang gewinnt, einen getN() hat, der 1 zurückgibt und der andere 0.

Also meine Frage ist: Könnte jemand das bestätigen?

+1

Warum sagen Sie, dass es einen "Fehler" gab? Wenn das angegebene Objekt nicht gefunden wurde, gab es nichts zu aktualisieren. Es würde kein Update geben, kein Schreibfehler. –

+0

Tut mir leid, als ein nicht-Englisch-Englisch-Sprecher, scheitere ich manchmal meinen richtigen Weg. ;) Ich meinte damit, dass es nicht stillschweigend aktualisiert wurde, was eigentlich mein Thema war. Ich werde meine Formulierung korrigieren. – Nicocube

Antwort

8

Vom GetLastError() documentation

Der Rückgabewert aus dem Befehl ein Objekt mit verschiedenen Bereichen ist. Die allgemeinen Felder sind unten aufgeführt. Es kann auch andere Felder geben.

  • ok - true zeigt an, dass der Befehl getLastError erfolgreich ausgeführt wurde. Dies bedeutet NICHT, dass kein letzter Fehler aufgetreten ist.
  • Fehler - wenn nicht null, zeigt an, dass ein Fehler aufgetreten ist. Value ist eine textuelle Beschreibung des Fehlers.
  • code - wenn gesetzt, zeigt den aufgetretenen Fehlercode an. connectionId - die ID der Verbindung
  • lastOp - die op-ID aus der letzten Operation

Für Updates:

  • n -, ob ein Update durchgeführt wurde, ist dies die Anzahl der Dokumente aktualisiert .

In diesem Zusammenhang bedeutet "get" n "field" get n, welches die Anzahl der aktualisierten Dokumente ist. Wenn "multi" nicht auf "true" gesetzt ist, kann es nur 0 oder 1 sein.

+0

Danke, dass du diese Informationen gefunden hast, jetzt bin ich mir sicher, was meinen Algorithmus angeht.^_ ^ – Nicocube