Docs Menu
Docs Home
/ /

再試行可能な書き込み

再試行可能な書き込みを使用すると、ドライバーはネットワークエラーが発生した後、またはレプリカセットまたはシャーディングされたクラスターで正常な プライマリが見つからない場合に、特定の書き込み操作を 1 回再試行できます。

再試行可能な書き込みには、次のものが必要です。

配置トポロジー
レプリカセットまたはシャーディングされたクラスタースタンドアロンインスタンスではサポートされていません。
ストレージ エンジン
WiredTigerインメモリなどのドキュメント レベルのロック機能を持つストレージエンジン。
MongoDB ドライバー

MongoDB 3.6+ と互換性のあるドライバー。

Java 3.6+

Python 3.6+

C 1.9+

Go 1.8+

C# 2.5+

Node 3.0+

Ruby 2.5+

Rust 2.1+

Swift 1.2+

Perl 2.0+

PHPC 1.4+

Scala 2.2+

C++ 3.6.6+

MongoDB バージョン
MongoDB 3.6+ および featureCompatibilityVersion 3.6+ (すべてのノードで)setFeatureCompatibilityVersion を参照してください。
謝辞の書き込み
書込み保証 (write concern) 0 を使用する書込みは再試行できません。

トランザクションのコミット操作と中止操作 は再試行可能です。ドライバーは、retryWritesfalse であっても、エラーが発生するとこれらの操作を 1 回再試行します。

retryWrites の値に関係なく、トランザクション内の書き込みは、個別に再試行することはできません。

トランザクションの詳細については、「トランザクション」を参照してください。

MongoDB ドライバー
MongoDB 4.2以上と互換性のあるドライバーでは、 の再試行可能な書込みがデフォルトで有効になります。 それ以前のドライバーではretryWrites=trueオプションが必要です。 MongoDB 4と互換性のあるドライバーを使用するアプリケーションでは、 retryWrites=trueオプションを省略できます。 2以上

再試行可能な書き込みを無効にするには、MongoDB 4.2 以降と互換性のあるドライバーを使用するアプリケーションの場合、接続文字列に retryWrites=false が含まれていなければなりません。
mongosh

mongosh では 再試行可能な書き込みがデフォルトで有効になります。を無効にするには、--retryWrites=false: を使用します。

mongosh --retryWrites=false

MongoDB は、書込み保証 (write concern)が確認された場合、次の操作を再試行します(例、書込み保証{w: 0} にできません)。

注意

トランザクション 内の書き込みは個別に再試行できません。

メソッド
説明

Inserts

単一ドキュメントの更新

単一ドキュメントの削除

findAndModify の操作(常に単一ドキュメント)。

db.collection.bulkWrite() 次の書き込み操作を伴います。

単一ドキュメントの書き込み操作だけで構成される一括書き込み操作。再試行可能な一括操作には、指定された書き込み操作を自由に組み合わせることができますが、updateMany などの複数のドキュメントでの書き込み操作を含めることはできません。

単一ドキュメントの書き込み操作だけで構成される一括書き込み操作。再試行可能な一括操作には、指定された書き込み操作を自由に組み合わせることができますが、multi オプションに true を指定する update などの複数ドキュメントでの書き込み操作を含めることはできません。

MongoDB は書き込みを一度再試行します。これは一時的なネットワークエラーやレプリカセットの選挙には対応しますが、永続的なネットワークエラーには対応しません。

ドライバーは再試行する前に新しいプライマリを見つけるまで serverSelectionTimeoutMS 待機します。フェイルオーバーにこのタイムアウトよりも長い時間がかかると、再試行可能な書き込みは失敗します。

警告

クライアントがlocalLogicalSessionTimeoutMinutesを超えて応答しない場合、クライアントが回復すると書き込みが再試行され、再度適用されることがあります。

serverStatus には、transactions セクションに再試行可能な書き込み統計が含まれています。

公式ドライバーではデフォルトで 再試行可能な書込みが有効になります 。再試行可能な書き込みを無効にしない限り、local データベースへの書き込みは失敗します。

無効にするには、retryWrites=false を接続文字列に設定します。

MongoDB 6.1 以降では、再試行可能な書き込みの 1 回目と 2 回目の試行の両方が失敗し、書き込みが 1 つも実行されない場合、MongoDB はNoWritesPerformed ラベルの付いたエラーを返します。

NoWritesPerformed ラベルは、insertMany() のようなバッチ操作の結果とを区別します。insertMany 操作では、次のいずれかの結果が発生する可能性があります。

結果
MongoDB 出力

ドキュメントは挿入されません。

NoWritesPerformed ラベルの付いたエラーが返されました。

部分的な作業が完了しました。(少なくとも 1 つのドキュメントが挿入されていますが、すべてではありません。)

NoWritesPerformed ラベルの付いていないエラーが返されました。

すべてのドキュメントが挿入されます。

成功が返されました。

アプリケーションは NoWritesPerformed ラベルを使用して、ドキュメントが挿入されていないことを明確に判断できます。このエラー報告により、アプリケーションは再試行可能な書き込みを処理する場合にデータベースの正確な状態を維持できます。

前のバージョンの MongoDB では、再試行可能な書き込みの 1 回目と 2 回目の両方が失敗するとエラーが返されました。ただし、書き込みが実行されなかったことを示す区別はありません。

再試行可能な読み取り

戻る

一括書き込み (write)

項目一覧