3

挿入が成功したことを確認するために、(Java を使用して) コレクションへの挿入の失敗を処理したいと考えています。その挿入が失敗した場合に備えて、フォールバック アクションを実行したいと考えています。

Java の次のコードと最新の mongo ドライバー (バージョン 2.11.3) を想定しています。

BasicDBObject doc = new BasicDBObject("name", "MongoDB");
WriteResult result = coll.insert(WriteConcern.SAFE, doc);

挿入が WriteResult を返し、MongoException をスローする可能性があるという事実に混乱しています。挿入の失敗を安全に検出するにはどうすればよいですか? コード例を提供してください。そして、挿入がいつ例外をスローするのか、いつエラー書き込み結果を返すのかを明確にすることができれば。http://api.mongodb.org/java/2.11.3 /で Java ドライバー API ドキュメントを検索しようとしました。ただし、この情報はそこにありません。

WriteResult result;
try {
    result = coll.insert(WriteConcern.SAFE, doc);
}
catch(MongoException ex){
    logger.warn("Insert failed.", ex);
    throw ex;
}

//Shall I check result here for additional errors?  

確認する必要がある場合、挿入結果を確認することで検出できるエラーの種類は何ですか?

4

1 に答える 1

3

WriteConcern」を見る必要があります。必要なすべての動作が含まれています。

次のように、 1 回の書き込みごとに使用できます。

coll.insert(dbObj, WriteConcern.SAFE);

WriteConcern.SAFE を使用すると、操作はプライマリ サーバーからの確認応答を待機するため、例外が発生しなければ問題ありません。

または、MongoClient を作成するときに、すべての書き込み操作のデフォルトの動作を設定できます。

MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
builder.writeConcern(WriteConcern.JOURNAL_SAFE);
MongoClient mongoClient = new MongoClient(
    new ServerAddress("localhost"), builder.build());

[Colin Morelli のコメントに基づく] 例外を発生させる WriteConcern を使用しない場合は、WriteResult.getLastError() を使用して成功したかどうかを判断できます。同様に、WriteConcern.SAFE を使用して書き込みが成功した場合、WriteResult には、書き込まれたレコード数などの有用な情報が含まれます。

ここでは、一般的なWriteConcern について読むことができます。

于 2013-11-16T19:31:27.383 に答える