10

MongoDBとJavaAPIを使用してJavaコードを作成していますが、Javadocの一部がわかりません。

マルチスレッドのコンテキストでは、DBCollection.html#update(com.mongodb.DBObject、com.mongodb.DBObject)を使用して一意のドキュメントを更新しますが、2つのスレッドが同時に書き込みを試みる可能性があることがわかりました。このコンテキストでは、Mongodbが楽観的な書き込みロックを使用しているように見えるため、書き込みが1回だけ行われたことを確認しましたが、プログラムで、書き込みが書き込みを行ったスレッドとそうでないスレッドを調べたいと思いました。「更新なし」の動作は無音だったので(つまり、例外などはありません)、問題に答えるために何らかの方法でAPIを検索し、いくつかのテストの後でこのメソッドを見つけました:WriteResult#getN()

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

説明は、うーん...本当に網羅的ではありません。私のテストでは、書き込みに勝ったスレッドには1を返すgetN()があり、他のスレッドには0が含まれていることがわかりました。

だから私の質問は:誰かがこれを確認できますか?

4

1 に答える 1

8

GetLastError()ドキュメントから

コマンドからの戻り値は、さまざまなフィールドを持つオブジェクトです。一般的なフィールドを以下に示します。他のフィールドもあるかもしれません。

  • ok --trueは、getLastErrorコマンドが正常に完了したことを示します。これは、最後のエラーがなかったことを示すものではありません。
  • err-null以外の場合、エラーが発生したことを示します。値は、エラーのテキストによる説明です。
  • code-設定されている場合、発生したエラーコードを示します。connectionId-接続のID
  • lastOp-最後の操作からのop-id

更新の場合:

  • n-更新が行われた場合、これは更新されたドキュメントの数です。

したがって、このコンテキストでは、「get "n" field」は、更新されたドキュメントの数であるgetnを意味します。「multi」をtrueに設定しないと、0または1のいずれかになります。

于 2012-05-19T22:26:37.990 に答える