操作エラーの処理
Overview
このページでは、MongoDB Rust ドライバーを使用して MongoDB の操作を実行するときに発生する可能性のあるエラーについて説明します。 ドライバーが発生する操作エラーの種類を理解したら、適切なアクションを実行してそれを処理するか、エラーが発生したコードを修正することができます。
注意
このページでは、操作エラーの処理のみを説明します。 MongoDB またはドライバーに関するその他の問題が発生した場合は、次のリソースにアクセスしてください。
MongoDB の配置に接続する際に発生し得る問題の潜在的な解決策についての接続のトラブルシューティング
バグの報告、ドライバーへの貢献、およびリソースの検索に関する情報は「問題とヘルプ」のページを参照してください
MongoDB Community フォーラム では、質問、ディスカッション、または一般的なテクニカルサポートが受けられます。
エラータイプ
ドライバーが操作の実行中にエラーを発生した場合、Error タイプのエラーが返されます。
Error
タイプには、発生したエラーのタイプを記述するkind
フィールドが含まれています。 kind
フィールドの値は列挙 エラー型 。ErrorKind
列挙型には、次のようなさまざまな種類のエラーに対するバリアントがあります。
InvalidArgument
: メソッドに無効な引数を指定したAuthentication
: ドライバーは認証中にエラーを発生しましたServerSelection
: クライアントが操作用サーバーを選択できませんでしたWrite
: 書き込み操作中にエラーが発生しましたTransaction
: トランザクション中にエラーが発生しました
たとえば、コレクション内にすでにある_id
フィールド値を複製する挿入操作を実行しようとすると、ドライバーはError
インスタンスを返し、次のエラー メッセージを出力します。
Error: Error { kind: Write(WriteError(WriteError { code: 11000, code_name: None, message: "E11000 duplicate key error collection: db.test_coll index: _id_ dup key: { _id: 1 }", details: None })), labels: {}, wire_version: None, source: None }
上記のエラー メッセージでは、 kind
フィールドの値はWrite
です。 このタイプのエラーの詳細については、このガイドの「書込みエラー タイプ 」セクションを参照してください。
接続エラー
同時操作エラーにより、接続プールがクリアされ、サーバーへの接続が中断されることがあります。 この状況では、ドライバーはkind
フィールドの値がConnectionPoolCleared
であるError
型を発生させます。 エラーメッセージには、同時操作が失敗した理由が記載されています。
このエラーに対処するために接続プールを調整する方法については、サーバー マニュアルの「 接続プール設定の調整 」を参照してください。
エラーを発生させる状況に応じて、ドライバーは次のエラー メッセージに示すように、エラーにRetryableWriteError
ラベルを追加する場合があります。
Error { kind: ConnectionPoolCleared { message: "Connection pool for localhost:27017 cleared because another operation failed with: Kind: I/O error: timed out, labels: {}" }, labels: {"RetryableWriteError"}, wire_version: None, source: None }
このラベルは、エラーが書き込み再試行可能なことを示しています。つまり、ドライバーは 1 回の再試行を行います。
書込みエラーの種類
ドライバーが書込み操作を実行中にエラーが発生すると、 kind
フィールド値がWrite
であるError
インスタンスが発生します。 Write
バリアントの本体は、列挙 型 WriteFailure は、 WriteError 型の値を受け取ります。 または WriteConcernError 。
書込み保証 (write concern) エラー
書き込み操作を実行し、ドライバーが指定された書込み保証を満たすことができない場合、ドライバーはWriteConcernError
エラーを発生させます。 たとえば、3 つのノードを持つレプリカセットの操作に対してmajority
の書込み保証を指定した場合、書込み操作が 1 つのノードにのみ伝播する場合、ドライバーはこのエラーを返します。
書込み保証 (write concern) の詳細については、サーバー マニュアルの「書込み保証(write concern) 」を参照してください。
WriteError
ドライバーは、書込み保証を満たすために関連しない書き込み操作の実行中に発生したエラーに対してWriteError
エラーを発生させます。 このエラーにはさまざまな原因があるため、 WriteError
タイプには、書込みエラーのタイプとエラーの理由を説明するフィールドが含まれています。
たとえば、コレクションのスキーマ検証ルールに違反するコレクションにドキュメントを挿入しようとすると、ドライバーはWriteError
エラーを発生させます。 コレクションには、 quantity
フィールドの値がint
型であるというルールがあるとします。 quantity
の値が"three"
であるドキュメントを挿入しようとすると、ドライバーは次のエラー メッセージを出力します。
Error: Error { kind: Write(WriteError(WriteError { code: 121, code_name: None, message: "Document failed validation", details: Some(Document({"failingDocumentId": Int32(1), "details": Document({"operatorName": String("$jsonSchema"), "title": String("Numerical Validation"), "schemaRulesNotSatisfied": Array(...)})})) })), labels: {}, wire_version: None, source: None }
上記のエラー メッセージでは、 message
フィールドにはエラーの理由が説明され、 details
フィールドには失敗した操作に関する具体的な詳細が記載されています。 このエラーに対処するには、ドキュメントを変更してスキーマ検証ルールに準拠するか、検証をバイパスする必要があります。
スキーマ検証の詳細については、「 スキーマ検証 に関するガイド」を参照してください。