2012-05-19 8 views
10

Sto scrivendo del codice Java usando MongoDB con Java API e non sono sicuro di parte del Javadoc.Mongodb java api: WriteResult # getN()

In un contesto multi-thread, utilizzo DBCollection.html#update(com.mongodb.DBObject, com.mongodb.DBObject) per aggiornare un documento univoco , ma ho visto che due thread potevano provare a scrivere contemporaneamente. In questo contesto, ho osservato che era stata eseguita solo una scrittura, poiché Mongodb sembra utilizzare un blocco di scrittura ottimistico, ma volevo scoprire a livello di codice in quale thread la scrittura era quella che ha scritto e quale non era. Come un comportamento "no update" rimase in silenzio (intendo non fa eccezione o qualcosa del genere), ho cercato nella API qualche modo a rispondere il mio problema e dopo alcuni test scoperto questo metodo: WriteResult#getN()

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

La descrizione è, canticchia ... non molto esaustivo. I miei test hanno dimostrato che il thread che ha vinto la scrittura ha un getN() che restituisce 1 e l'altro 0.

Quindi la mia domanda è: Qualcuno potrebbe confermarlo?

+1

perché dici che c'è stato un "fallimento"? se l'oggetto specificato non è stato trovato, non c'era nulla da aggiornare. Non ci sarebbe nessun aggiornamento, non un errore di scrittura. –

+0

Mi spiace, come oratore inglese non nativo, a volte non riesco a dire la mia mente nel modo giusto. ;) Intendevo che non aggiornava in silenzio, che era il mio problema in realtà. Correggerò la mia formulazione – Nicocube

risposta

8

Dalla GetLastError() documentation

Il valore restituito dal comando è un oggetto con vari campi. I campi comuni sono elencati di seguito; potrebbero esserci anche altri campi.

  • ok - true indica che il comando getLastError è stato completato correttamente. Questo NON indica che non c'era un ultimo errore.
  • err - se non null, indica che si è verificato un errore. Il valore è una descrizione testuale dell'errore.
  • codice
  • - se impostato, indica il codice di errore che si è verificato. connectionId - l'id del collegamento
  • lastOp - l'op-id dall'ultima operazione

Per aggiornamenti:

  • n - se un aggiornamento è stato fatto, questo è il numero di documenti aggiornati .

Quindi, in questo contesto, "get" n "campo" significa ottenere n quale è il numero di documenti aggiornati. Senza "multi" impostato su true, può essere solo 0 o 1.

+0

Grazie per aver trovato queste informazioni, ora sono sicuro del mio algoritmo.^_ ^ – Nicocube