Overview
このガイドでは、Rust ドライバーを使用してデータベースコマンドを実行する方法を学習できます。 データベースコマンドを使用して、サーバー統計の取得、レプリカセットの初期化、集計パイプラインの実行など、さまざまな管理および診断タスクを実行できます。
このガイドには、次のセクションが含まれています。
Execute a Command describes the syntax and behavior of the
run_command()andrun_cursor_command()methods応答には、コマンド実行メソッドが返す情報が記述されます
コマンドの例では、コマンドの例を示し、コマンドの出力を説明します
追加情報では、このガイドで言及されている型とメソッドのリソースとAPIドキュメントへのリンクを提供します
重要
データベースコマンドよりもドライバー メソッドを優先
このドライバーは、多くのデータベース コマンドのラッパー メソッドを提供します。 可能な場合は、データベースコマンドを実行する代わりにドライバー メソッドを使用することをお勧めします。
To perform administrative tasks, use the MongoDB Shell instead of the Rust driver. Calling the db.runCommand() method inside the shell is the preferred way to issue database commands, as it provides a consistent interface between the shell and drivers.
コマンドの実行
データベースコマンドを実行するには、コマンドとコマンド ドキュメントでコマンドと関連するパラメーターを指定し、そのコマンド ドキュメントを コマンド実行メソッドに渡す必要があります。 Rust ドライバーは、データベースコマンドを実行するための次のメソッドを提供します。
run_command()は、コマンドの応答をDocumentタイプとして返します。 このメソッドは任意のデータベースコマンドで使用できます。run_cursor_command()は、コマンド応答を反復可能なCursorタイプとして返します。 このメソッドは、データベースコマンドが複数の結果ドキュメントを返す場合にのみ使用できます。
次のコードは、 run_command()メソッドを使用してデータベース上でレプリカセット内の現在のノードのロールに関する情報を返すhelloコマンドを実行する方法を示しています。
let result = my_db.run_command(doc! { "hello": 1 }, None).await?;
checkMetadataConsistencyコマンドは複数の結果ドキュメントを返します。 次のコードに示すように、 run_cursor_command()メソッドを使用してこのコマンドを実行し、結果を収集できます。
let cursor = my_db .run_cursor_command(doc! { "checkMetadataConsistency": 1 }, None) .await?;
データベースコマンドと対応するパラメータの完全なリストへのリンクを見つけるには、「追加情報」セクションを参照してください。
注意
読み込み設定 (read preference)
run_command()メソッドとrun_cursor_command()メソッドは、コード内の他の場所にあるDatabaseオブジェクトに設定した読み込み設定(read preference)に従いません。 デフォルトでは、 primary読み込み設定(read preference)が使用されます。
オプション オブジェクトをいずれかのメソッドに渡すことで、コマンド実行の読み込み設定(read preference)を設定できます。 次のコードは、 SelectionCriteriaインスタンスで読み込み設定(read preference)を指定し、それをオプションとしてrun_command()メソッドに渡す方法を示しています。
let command_options = SelectionCriteria::ReadPreference( ReadPreference::Primary ); let result = my_db.run_command(command_doc, command_options).await?;
run_cursor_command()メソッドはRunCursorCommandOptionsインスタンスをパラメーターとして受け取ります。 この構造体のselection_criteriaフィールドを設定して、読み込み設定(read preference)を選択できます。
読み込み設定(read preference)オプションの詳細については、サーバー マニュアルの読み込み設定(read preference) を参照してください。
応答
run_command()メソッドは、コマンド実行後のデータベースからの応答を含むDocumentオブジェクトを返します。 run_cursor_command()は、複数の結果ドキュメントを参照するCursorを返します。
各データベースコマンドは異なる機能を実行するため、応答内容は実行されたコマンドによって異なる場合があります。 ただし、すべての応答には次のフィールドを持つドキュメントが含まれます。
フィールド | 説明 |
|---|---|
<command result> | Fields specific to the database command. たとえば、 |
| コマンドが成功したか( |
| 操作の論理的な時間。MongoDB は論理時間を使用して操作を順序付けます。 論理時間の詳細については、グローバル論理クロック に関するブログ記事をご覧ください。 |
| 署名されたクラスター時間を含むドキュメント。 クラスター時間は、操作の順序付けに使用される論理時間です。 このドキュメントには、次のフィールドが含まれています。
|
コマンドの例
次のコードは、 run_command()メソッドを使用して、 plantsデータベースのflowersコレクションに対してcount操作を行うためのexplainコマンドを実行する方法を示しています。 explainコマンドは"queryPlanner"の冗長モードで実行されます。
let my_db = client.database("plants"); let count_command = doc! { "count": "flowers" }; let explain_command = doc! { "explain": count_command, "verbosity": "queryPlanner" }; let result = my_db.run_command(explain_command, None).await?;
出力
出力には、選出されたプラン(クエリオプティマイザによって選択されたプラン)や拒否されたプランなど、 count操作の実行を説明するフィールドが含まれます。 出力には、 explainコマンドの実行に関する情報も含まれています。
{ "$clusterTime": { "clusterTime": { "T": 1673969525, "I": 24 }, "signature": {...} }, "command": { "$db": "plants", "count": "flowers" }, "explainVersion": "1", "ok": 1, "operationTime": { "T": 1673969525, "I": 24 }, "queryPlanner": { "indexFilterSet": false, "maxIndexedAndSolutionsReached": false, "maxIndexedOrSolutionsReached": false, "maxScansToExplodeReached": false, "namespace": "plants.flowers", "rejectedPlans": [], "winningPlan": { "stage": "RECORD_STORE_FAST_COUNT" } }, "serverInfo": {...}, "serverParameters": { "internalDocumentSourceGroupMaxMemoryBytes": 104857600, ... } }
詳細情報
このガイドの概念の詳細については、サーバー マニュアルの次のドキュメントを参照してください。