javaDocによると、MongoDB-javagetN()
のクラスのメソッドは、操作で更新されたドキュメントの数を返します。WriteResult
ただし、ドキュメントが正しく挿入されている場合でも、常にゼロが返されます。
なぜそうなのか?または私はそれを間違って理解しましたか?
javaDocによると、MongoDB-javagetN()
のクラスのメソッドは、操作で更新されたドキュメントの数を返します。WriteResult
ただし、ドキュメントが正しく挿入されている場合でも、常にゼロが返されます。
なぜそうなのか?または私はそれを間違って理解しましたか?
これは通常の MongoDB の動作であり、Java ドライバーとは何の関係もないという印象を受けました。
ドキュメントで見つけることができる唯一のものはこれです:
getLastError.n は、前の操作が更新または削除操作であった場合、更新または削除されたドキュメントの数を報告します。
anでも a でもないinsert
ことは指定されていないようで、0 はデフォルト値として適切です。mongo シェルで簡単に確認できます。update
remove
n
> db.test.insert({_id: 'test'})
> db.getLastErrorObj()
{ "n" : 0, "connectionId" : 7, "err" : null, "ok" : 1 }
私が間違っていない限り、それは実際には問題ではありません。どのような状況で挿入が失敗するかを自問してみてください (たとえば、接続障害以外)。私が考えることができる唯一のものは、例外が発生する単一性制約違反です。したがって、ほぼ定義上、インスタンスを受け取るという事実WriteResult
は、操作が成功し、ドキュメントが挿入されたことを意味します。
いくつかのメモ:
WriteConcern
私の以前の議論は、エラーが報告されるほど十分に高いということにかかっています。たとえば、を使用している場合WriteConcern.NONE
、例外は発生しません。save
代わりにいつでも使用できますinsert
。あまりきれいではありませんが、期待どおりに動作します。http://docs.mongodb.org/manual/core/write-concern/も確認してください。
デフォルトの動作は、「安全な」書き込み懸念を使用しないことです