12

javaDocによると、MongoDB-javagetN()のクラスのメソッドは、操作で更新されたドキュメントの数を返します。WriteResultただし、ドキュメントが正しく挿入されている場合でも、常にゼロが返されます。

なぜそうなのか?または私はそれを間違って理解しましたか?

4

3 に答える 3

10

これは通常の MongoDB の動作であり、Java ドライバーとは何の関係もないという印象を受けました。

ドキュメントで見つけることができる唯一のものはこれです:

getLastError.n は、前の操作が更新または削除操作であった場合、更新または削除されたドキュメントの数を報告します。

anでも a でもないinsertことは指定されていないようで、0 はデフォルト値として適切です。mongo シェルで簡単に確認できます。updateremoven

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

私が間違っていない限り、それは実際には問題ではありません。どのような状況で挿入が失敗するかを自問してみてください (たとえば、接続障害以外)。私が考えることができる唯一のものは、例外が発生する単一性制約違反です。したがって、ほぼ定義上、インスタンスを受け取るという事実WriteResultは、操作が成功し、ドキュメントが挿入されたことを意味します。

いくつかのメモ:

  • WriteConcern私の以前の議論は、エラーが報告されるほど十分に高いということにかかっています。たとえば、を使用している場合WriteConcern.NONE、例外は発生しません。
  • 更新されたドキュメントの数が絶対に必要な場合は、save代わりにいつでも使用できますinsert。あまりきれいではありませんが、期待どおりに動作します。
于 2013-09-06T14:19:38.260 に答える
1

http://docs.mongodb.org/manual/core/write-concern/も確認してください。

デフォルトの動作は、「安全な」書き込み懸念を使用しないことです

于 2013-09-06T13:15:33.873 に答える