Docs Menu
Docs Home
/ / /
Rust ドライバー

操作エラーの処理

項目一覧

  • Overview
  • エラータイプ
  • 接続エラー
  • 書込みエラーの種類
  • 書込み保証 (write concern) エラー
  • WriteError

このページでは、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 。

書き込み操作を実行し、ドライバーが指定された書込み保証を満たすことができない場合、ドライバーはWriteConcernErrorエラーを発生させます。 たとえば、3 つのノードを持つレプリカセットの操作に対してmajorityの書込み保証を指定した場合、書込み操作が 1 つのノードにのみ伝播する場合、ドライバーはこのエラーを返します。

書込み保証 (write concern) の詳細については、サーバー マニュアルの「書込み保証(write concern) 」を参照してください。

ドライバーは、書込み保証を満たすために関連しない書き込み操作の実行中に発生したエラーに対して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フィールドには失敗した操作に関する具体的な詳細が記載されています。 このエラーに対処するには、ドキュメントを変更してスキーマ検証ルールに準拠するか、検証をバイパスする必要があります。

スキーマ検証の詳細については、「 スキーマ検証 に関するガイド」を参照してください

戻る

接続のトラブルシューティング