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()メソッドに渡すことができます。
commentenableUtf8ValidationrawreadPreferencesession
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> | データベースコマンド に固有のフィールドを提供します。 たとえば、 |
| コマンドが成功( |
| 操作の論理時間を示します。 MongoDBは論理時間を使用して操作を順序付けます。 論理時間の詳細については、 グローバル論理クロック に関するブログ記事をご覧ください。 |
| 署名されたクラスター時間を返すドキュメントを提供します。 クラスター時間は、操作の順序付けに使用される論理時間です。 このドキュメントには、以下のフィールドが含まれています。
|
例
次のコードは、 runCursorCommand()メソッドを使用してtestDBデータベースでcheckMetadataConsistencyコマンドを実行し、結果を反復処理する方法を示しています。
// Connect to the "testDB" databaseconst db = client.db("testDB");
// Run a cursor command to check metadata consistency within the databaseconst cursor = await db.runCursorCommand({ checkMetadataConsistency: 1,});// Iterate through the cursor's results and print the contentsfor await (const doc of cursor) { console.log(doc);}出力
出力には、カーソル オブジェクトの内容が含まれます。 ドキュメントは、データベース内のメタデータの不整合を説明します。
{ type: ..., description: ..., details: { namespace: ..., info: ... }}{ type: ..., description: ..., details: { namespace: ..., collectionUUID: ..., maxKeyObj: ..., ... }}注意
コマンドの応答をカーソルに保存すると、カーソルの内容にアクセスするときにコマンドの結果ドキュメントのみが表示されます。 ok 、 operationTime 、 $clusterTimeフィールドは表示されません。
コマンドの実行例:フルファイル
注意
セットアップ例
この例では、接続 URI を使用して MongoDB インスタンスに接続します。MongoDB インスタンスへの接続の詳細については、「MongoDB への接続」ガイドを参照してください。この例では、Atlas サンプル データセットに含まれる sample_mflix データベースの movies コレクションも使用します。MongoDB Get Startedに従って、MongoDB Atlasの無料クラスター上のデータベースに読み込むことができます。
注意
Typescript固有の機能はありません
次のコード例ではJavaScriptを使用します。このユースケースに関連するドライバーのTypescript固有の機能はありません。
次のサンプルコードでは、dbStats コマンドを送信して、sample_mflixデータベースから統計をリクエスト。
/* Run a database command */
import { MongoClient } from "mongodb";
// Replace the uri string with your MongoDB deployment's connection stringconst uri = "<connection string uri>";
const client = new MongoClient(uri);
async function run() { try { // Get the "sample_mflix" database const db = client.db("sample_mflix");
// Find and print the storage statistics for the "sample_mflix" database using the 'dbStats' command const result = await db.command({ dbStats: 1, }); console.log(result); } finally { // Close the database connection on completion or error await client.close(); }}run().catch(console.dir);上記のコマンドを実行すると、次の出力が生成されます。
{ db: 'sample_mflix', collections: 6, views: 0, objects: 75620, ..詳細情報
このガイドの概念の詳細については、次のドキュメントを参照してください。
カーソルからデータを検索する方法については、「 カーソルからデータにアクセスする」の基礎ページを参照してください。