コマンドの実行
Overview
このガイドでは、Go ドライバーを使用してデータベースコマンドを実行する方法を学習できます。 データベースコマンドを使用して、サーバー統計の取得、レプリカセットの初期化、集計パイプラインの実行など、さまざまな管理および診断タスクを実行できます。
コマンドの実行
データベースコマンドを実行するには、コマンドとコマンド ドキュメントでコマンドと関連するパラメーターを指定し、そのコマンド ドキュメントをラッパー メソッドに渡す必要があります。 コマンド ドキュメントは、 bson.D
などの順序保持タイプである必要があります。 Go ドライバーは、データベースコマンドを実行するための次のメソッドを提供します。
RunCommand()
は、コマンドの応答をSingleResult
タイプとして返します。 このメソッドは任意のデータベースコマンドで使用できます。RunCommandCursor()
は、コマンドの応答をCursor
タイプとして返します。 データベースコマンドが複数の結果ドキュメントを返す場合は、このメソッドを使用できます。
次のコードは、 RunCommand()
メソッドを使用してデータベース上でレプリカセット内の現在のノードのロールに関する情報を返すhello
コマンドを実行する方法を示しています。
command := bson.D{{"hello", 1}} var result bson.M err = db.RunCommand(context.TODO(), command).Decode(&result)
データベースコマンドと対応するパラメータの完全なリストについては、「 追加情報 」セクションを参照してください。
注意
読み込み設定 (read preference)
RunCommand()
とRunCommandCursor()
は、コード内の他の場所にあるDatabase
オブジェクトに設定した読み取り設定に従いません。 You can set a read preference for command execution by passing a RunCmdOptions
object to either method:
opts := options.RunCmd().SetReadPreference(readpref.Primary()) cursor, err := db.RunCommandCursor(context.TODO(), command, opts)
読み込み設定(read preference)オプションの詳細については、 CRUD 操作の実行変更の基礎ページを参照してください。
応答
各メソッドは、コマンドの実行後にデータベースからの応答を含むSingleResult
オブジェクトまたはカーソルを返します。 各データベースコマンドは異なる機能を実行するため、応答内容はコマンド間で異なる可能性があります。 ただし、すべての応答には次のフィールドを持つドキュメントが含まれます。
フィールド | 説明 |
---|---|
<command result> | データベースコマンド に固有のフィールドを提供します。 たとえば、 |
| コマンドが成功( |
| 操作の論理時間を示します。 MongoDBは論理時間を使用して操作を順序付けます。 論理時間の詳細については、 グローバル論理クロック に関するブログ記事をご覧ください。 |
| 署名されたクラスター時間を返すドキュメントを提供します。 クラスター時間は、操作の順序付けに使用される論理時間です。 このドキュメントには、以下のフィールドが含まれています。
|
例
次のコードは、 RunCommand()
メソッドを使用して、 db
データベースのflowers
コレクションに対してcount
操作を行うためのexplain
コマンドを実行する方法を示しています。 explain
コマンドは"queryPlanner"
の冗長モードで実行されます。
db := client.Database("db") // Creates commands to count documents in a collection and explain // how the count command runs countCommand := bson.D{{"count", "flowers"}} explainCommand := bson.D{{"explain", countCommand}, {"verbosity", "queryPlanner"}} // Retrieves results of the explain command var result bson.M err = db.RunCommand(context.TODO(), explainCommand).Decode(&result)
出力
出力には、 クエリオプティマイザ によって選択されたプランである勝利プランや拒否されたプランなど、 count
操作の実行を説明するフィールドが表示されます。 出力には、 explain
コマンドの実行に関する情報も含まれています。
{ "$clusterTime": { "clusterTime": { "T": 1673969525, "I": 24 }, "signature": {...} }, "command": { "$db": "db", "count": "flowers" }, "explainVersion": "1", "ok": 1, "operationTime": { "T": 1673969525, "I": 24 }, "queryPlanner": { "indexFilterSet": false, "maxIndexedAndSolutionsReached": false, "maxIndexedOrSolutionsReached": false, "maxScansToExplodeReached": false, "namespace": "db.flowers", "rejectedPlans": [], "winningPlan": { "stage": "RECORD_STORE_FAST_COUNT" } }, "serverInfo": {...}, "serverParameters": { "internalDocumentSourceGroupMaxMemoryBytes": 104857600, ... } }
詳細情報
このガイドの概念の詳細については、次のドキュメントを参照してください。
カーソルからデータを検索する方法については、「 カーソルからデータにアクセスする」の基礎ページを参照してください。