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

コマンドの実行

項目一覧

  • Overview
  • コマンドの実行
  • 応答
  • コマンドの例
  • 出力
  • 詳細情報
  • API ドキュメント

このガイドでは、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. たとえば、 countnフィールドを返し、 explainqueryPlannerフィールドを返します。

ok

コマンドが成功したか( 1 )失敗したか( 0 )。

operationTime

操作の論理的な時間。MongoDB は論理時間を使用して操作を順序付けます。

論理時間の詳細については、グローバル論理クロック に関するブログ記事をご覧ください。

$clusterTime

署名されたクラスター時間を含むドキュメント。 クラスター時間は、操作の順序付けに使用される論理時間です。

このドキュメントには、次のフィールドが含まれています。

  • clusterTime、ノードの最も高い既知のクラスター時間のタイムスタンプ

  • signature、クラスター時間のハッシュと、クラスター時間に署名するために使用されるキーの ID を含むドキュメント

次のコードは、 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,
...
}
}

このガイドの概念の詳細については、サーバー マニュアルの次のドキュメントを参照してください。

戻る

トレースとロギング