コマンドの実行
Overview
このガイドでは、Node.js ドライバーを使用してデータベースコマンドを実行する方法を学習できます。 データベースコマンドを使用して、サーバー統計の取得、レプリカセットの初期化、集計パイプラインの実行など、さまざまな管理および診断タスクを実行できます。
重要
データベースコマンドよりもドライバー メソッドを優先
このドライバーは、多くのデータベース コマンドのラッパー メソッドを提供します。 可能な場合は、データベースコマンドを実行する代わりにドライバー メソッドを使用することをお勧めします。
管理タスクを実行するには、Node.js ドライバーの代わりに MongoDB Shellを使用します。 shell 内で db.runCommand()
メソッドを呼び出す方法は、shell とドライバー間の一貫したインターフェースを提供するため、データベース コマンドを発行するための推奨される方法です。
コマンドの実行
データベースコマンドを実行するには、ドキュメント内でコマンドと関連するパラメータを指定し、このドキュメントを コマンド実行メソッドに渡す必要があります。 Node.js ドライバーは、データベース コマンドを実行するための次のメソッドを提供します。
command()
は、コマンドの応答をDocument
タイプとして返します。 このメソッドは任意のデータベースコマンドで使用できます。runCursorCommand()
は、コマンド応答を反復可能なRunCommandCursor
タイプとして返します。 このメソッドは、データベースコマンドが複数の結果ドキュメントを返す場合にのみ使用できます。
次のコードは、 command()
メソッドを使用してデータベース上でレプリカセット内の現在のノードのロールに関する情報を返すhello
コマンドを実行する方法を示しています。
const result = await myDB.command({ hello: 1 });
データベースコマンドと対応するパラメータの完全なリストについては、「追加情報 」セクションを参照してください。
コマンド オプション
command()
runCursorCommand()
メソッドと メソッドで任意のコマンド動作を指定できます。
command()
メソッドは RunCommandOptions
オブジェクトを受け入れます。RunCommandOptions
型の詳細については、 APIドキュメントを参照してください。
runCursorCommand() method
はRunCursorCommandOptions
オブジェクトを受け入れます。 RunCursorCommandOptions
型の詳細については、 API ドキュメントを参照してください。
Node.js ドライバーのバージョン 6.0 以降では、次のオプションのみをcommand()
メソッドに渡すことができます。
comment
enableUtf8Validation
raw
readPreference
session
command()
メソッドに渡すドキュメントで、さらにオプションを設定できます。 コマンドと、それが受け入れるオプションの詳細については、コマンドを見つけ、サーバー マニュアルの「データベースコマンド」セクションのリンクに従ってください。
次のコードは、 majority
書込み保証(write concern)で実行されるgrantRolesToUser
コマンドを指定する方法を示しています。
const commandDoc = { grantRolesToUser: "user011", roles: [ "readWrite" ], writeConcern: { w: "majority" } }; const result = await myDB.command(commandDoc);
注意
読み込み設定 (read preference)
command()
メソッドとrunCursorCommand()
メソッドは、 Db
オブジェクトに設定した読み込み設定(read preference)を無視します。 これらのメソッドはデフォルトでprimary
の読み込み設定(read preference)を使用します。
次のコードは、読み込み設定(read preference)を指定し、それをオプションとしてcommand()
メソッドに渡す方法を示しています。
const commandOptions = { readPreference: "nearest" }; const result = await myDB.command(commandDoc, commandOptions);
読み込み設定(read preference)オプションの詳細については、サーバー マニュアルの読み込み設定(read preference) を参照してください。
応答
各メソッドは、コマンドの実行後にデータベースからの応答を含むDocument
オブジェクトまたはカーソルを返します。 各データベースコマンドは異なる機能を実行するため、応答内容はコマンド間で異なる可能性があります。 ただし、すべての応答には次のフィールドを持つドキュメントが含まれます。
フィールド | 説明 |
---|---|
<command result> | データベースコマンド に固有のフィールドを提供します。 たとえば、 count はn フィールドを返し、 explain はqueryPlanner フィールドを返します。 |
ok | コマンドが成功( 1 )したか失敗(0 )したかを示します。 |
operationTime | 操作の論理的な時間を示します。 MongoDB は論理時間を使用して操作を順序付けます。 |
$clusterTime | 署名されたクラスター時間を返すドキュメントを提供します。 クラスター時間は、操作の順序付けに使用される論理時間です。 このドキュメントには、以下のフィールドが含まれています。
|
例
次のコードは、 runCursorCommand()
メソッドを使用してtestDB
データベースでcheckMetadataConsistency
コマンドを実行し、結果を反復処理する方法を示しています。
// Connect to the "testDB" database const db = client.db("testDB"); // Run a cursor command to check metadata consistency within the database const cursor = await db.runCursorCommand({ checkMetadataConsistency: 1, }); // Iterate through the cursor's results and print the contents for await (const doc of cursor) { console.log(doc); }
出力
出力には、カーソル オブジェクトの内容が含まれます。 ドキュメントは、データベース内のメタデータの不整合を説明します。
{ type: ..., description: ..., details: { namespace: ..., info: ... } } { type: ..., description: ..., details: { namespace: ..., collectionUUID: ..., maxKeyObj: ..., ... } }
注意
コマンドの応答をカーソルに保存すると、カーソルの内容にアクセスするときにコマンドの結果ドキュメントのみが表示されます。 ok
、 operationTime
、 $clusterTime
フィールドは表示されません。
詳細情報
このガイドの概念の詳細については、次のドキュメントを参照してください。
カーソルからデータを取得する方法については、 カーソルからデータにアクセスする の基礎ページを参照してください。