コマンドの実行
Overview
このガイドでは、Rust ドライバーを使用してデータベースコマンドを実行する方法を学習できます。 データベースコマンドを使用して、サーバー統計の取得、レプリカセットの初期化、集計パイプラインの実行など、さまざまな管理および診断タスクを実行できます。
このガイドには、次のセクションが含まれています。
コマンドの実行では、
run_command()
およびrun_cursor_command()
メソッドの構文と動作について説明します応答には、コマンド実行メソッドが返す情報が記述されます
コマンドの例では、コマンドの例を示し、コマンドの出力を説明します
追加情報では、このガイドで言及されている型とメソッドのリソースとAPIドキュメントへのリンクを提供します
重要
データベースコマンドよりもドライバー メソッドを優先
このドライバーは、多くのデータベース コマンドのラッパー メソッドを提供します。 可能な場合は、データベースコマンドを実行する代わりにドライバー メソッドを使用することをお勧めします。
管理タスクを実行するには、Rust ドライバーの代わりにMongoDB Shellを使用します。 データベースコマンドを発行するには、shell 内でdb.runCommand()
メソッドを呼び出す方法がおすすめです。これにより、shell とドライバー間の一貫したインターフェースが提供されます。
コマンドの実行
データベースコマンドを実行するには、コマンドとコマンド ドキュメントでコマンドと関連するパラメーターを指定し、そのコマンド ドキュメントを コマンド実行メソッドに渡す必要があります。 Rust ドライバーは、データベースコマンドを実行するための次のメソッドを提供します。
run_command()
は、コマンドの応答をDocument
タイプとして返します。 このメソッドは任意のデータベースコマンドで使用できます。run_cursor_command()
は、コマンド応答を反復可能なCursor
タイプとして返します。 このメソッドは、データベースコマンドが複数の結果ドキュメントを返す場合にのみ使用できます。
次のコードは、 run_command()
メソッドを使用してデータベース上でレプリカセット内の現在のノードのロールに関する情報を返すhello
コマンドを実行する方法を示しています。
let result = my_db.run_command(doc! { "hello": 1 }).await?;
checkMetadataConsistency
コマンドは複数の結果ドキュメントを返します。 次のコードに示すように、 run_cursor_command()
メソッドを使用してこのコマンドを実行し、結果を収集できます。
let cursor = my_db .run_cursor_command(doc! { "checkMetadataConsistency": 1 }) .await?;
データベースコマンドと対応するパラメータの完全なリストへのリンクを見つけるには、「追加情報 」セクションを参照してください。
注意
読み込み設定 (read preference)
run_command()
メソッドとrun_cursor_command()
メソッドは、コード内の他の場所にあるDatabase
オブジェクトに設定した読み込み設定(read preference)に従いません。 デフォルトでは、 primary
読み込み設定(read preference)が使用されます。
コマンド実行の読み込み設定(read preference)を設定するには、 selection_criteria()
メソッドをrun_command()
またはrun_cursor_command()
に連結します。 次のコードは、 SelectionCriteria
インスタンスで読み込み設定(read preference)を指定し、それをselection_criteria()
メソッドにパラメーターとして渡す方法を示しています。
let result = my_db .run_command(doc! { "hello": 1 }) .selection_criteria(SelectionCriteria::ReadPreference(ReadPreference::Primary)) .await?;
run_cursor_command()
メソッドで読み取り設定を設定するには、前の例と同じ構文を使用します。
読み込み設定(read preference)オプションの詳細については、サーバー マニュアルの読み込み設定(read preference) を参照してください。
応答
run_command()
メソッドは、コマンド実行後のデータベースからの応答を含むDocument
オブジェクトを返します。 run_cursor_command()
は、複数の結果ドキュメントを参照するCursor
を返します。
各データベースコマンドは異なる機能を実行するため、応答内容は実行されたコマンドによって異なる場合があります。 ただし、すべての応答には次のフィールドを持つドキュメントが含まれます。
フィールド | 説明 |
---|---|
<command result> | Fields specific to the database command. たとえば、 count はn フィールドを返し、 explain はqueryPlanner フィールドを返します。 |
ok | コマンドが成功したか( 1 )失敗したか( 0 )。 |
operationTime | 操作の論理的な時間。MongoDB は論理時間を使用して操作を順序付けます。 |
$clusterTime | 署名されたクラスター時間を含むドキュメント。 クラスター時間は、操作の順序付けに使用される論理時間です。 このドキュメントには、次のフィールドが含まれています。
|
コマンドの例
次のコードは、 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).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, ... } }
詳細情報
このガイドの概念の詳細については、サーバー マニュアルの次のドキュメントを参照してください。