AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

データベースコマンドの実行

このガイドでは、 Rubyドライバーを使用してデータベースコマンドを実行する方法を学習できます。データベースコマンドを使用して、サーバー統計の取得、レプリカセットを初期化、集計パイプラインの実行中など、さまざまな管理および診断タスクを実行できます。

重要

データベースコマンドよりもドライバー メソッドを優先

このドライバーは、多くのデータベースコマンドのラッパーメソッドを提供します。 可能であれば、データベースコマンドを実行する代わりにこれらのメソッドを使用することをお勧めします。

管理タスクを実行するには、 Rubyドライバーの代わりにMongoDB Shellを使用します。シェル は、ドライバーでは使用できない可能性のあるヘルパーメソッドを提供します。

ドライバーまたはシェルに使用できるヘルパーがない場合は、このガイドで説明されている db.runCommand() シェルメソッドまたはドライバーの command メソッドと cursor_command メソッドを使用できます。

このガイドの例では、Atlasサンプルデータセット の sample_restaurantsデータベースを使用します。Rubyアプリケーションからこのデータベースにアクセスするには、Atlas クラスターに接続する Mongo::Clientオブジェクトを作成し、次の値を database 変数に割り当てます。

database = client.use('sample_restaurants').database

MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、MongoDBを使い始めるガイドを参照してください。

データベースコマンドを実行するには、Mongo::Database インスタンスで command メソッドを呼び出し、実行する操作の名前をパラメータとして渡します。

次の例では、command メソッドを呼び出して hello コマンドを実行し、サーバーに関する情報を返します。

database.command(hello: 1)

Tip

データベースコマンドとそれに対応するパラメーターの完全なリストを表示するには、 MongoDB Serverマニュアルの「 データベースコマンド 」を参照してください。

command メソッドは、指定されたコマンドに対するデータベースからの応答を含む Mongo::Operation::Result を返します。

次の方法を使用して、未加工のコマンド応答ドキュメントのフィールドにアクセスできます。

方式
説明

acknowledged?

サーバーがコマンドを確認した場合は true を返し、そうでない場合は false を返します。

inspect

コマンドの応答の書式設定された string 表現を返します。

ok?

コマンドが成功した場合は true を返し、そうでない場合は false を返します。ok? メソッドが false を返す場合、ドライバーは Mongo::Error::OperationFailure を発生させます。

cluster_time

サーバー応答で報告されたクラスター時間を返します。クラスター時間は、操作の順序付けに使用される論理時間です。このフィールドは、レプリカセット またはシャーディングされたクラスターで実行されたコマンドにのみ適用されます。

operation_time

操作実行の論理時間を返します。

Resultオブジェクトで使用できるメソッドの完全なリストについては、APIドキュメントを参照してください。

Tip

論理時間の詳細については、 Wikipedia の 論理クロック に関するエントリを参照してください。

次の例では、dbStats コマンドを実行して sample_restaurantsデータベースのストレージ統計を取得し、inspect メソッドを使用してコマンドの結果を出力します。

puts database.command({dbStats: 1}).first

このコマンドの出力には、次のコードに示すように、データベースに保存されているデータに関する情報が含まれます。

{"db"=>"sample_restaurants", "collections"=>4, "views"=>0, "objects"=>18767, "avgObjSize"=>596.1911866574306,"dataSize"=>11188720, "storageSize"=>7528448, "totalFreeStorageSize"=>0, "numExtents"=>0, "indexes"=>6,"indexSize"=>1519616, "indexFreeStorageSize"=>0, "fileSize"=>0,"nsSizeMB"=>0, "ok"=>1}

一部のデータベースコマンドは、結果をカーソルで返します。これらのコマンドを実行するには、Mongo::Databaseインスタンスでcursor_commandメソッドを呼び出します。このメソッドは、反復処理中にサーバーから追加の結果バッチを検索するMongo::Cursorオブジェクトを返します。コマンド応答にカーソルが含まれていない場合、ドライバーはMongo::Error::InvalidCursorOperationエラーを発生させます。

次の例では、cursor_command メソッドを使用して listCollections コマンドを実行し、sample_restaurants データベース内の各コレクションの名前とタイプを出力します。

cursor = database.cursor_command(listCollections: 1, nameOnly: true)cursor.each do |doc| puts docend

command メソッドおよび cursor_command メソッドには、以下のオプションを渡すことができます。

オプション
メソッド
説明

:read

command, cursor_command

コマンドに使用する読み込み設定(read preference)。cursor_command メソッドは、後続の getMore コマンドにもこの読み込み設定(read preference)を使用します。デフォルトでは、両方のメソッドが primary 読み込み設定(read preference)を使用します。

:session

command, cursor_command

コマンドに使用するセッション。cursor_command メソッドにセッションを指定しない場合、ドライバーはカーソルの有効期間中持続する暗黙的なセッションを作成します。

:timeout_ms

command, cursor_command

操作のタイムアウト(ミリ秒単位)。値は非負の整数である必要があります。0 の値はタイムアウトなしを意味します。このオプションを設定しない場合、メソッドはデータベースまたはクライアントからタイムアウトを継承します。

:batch_size

cursor_command

getMore コマンドで送信する batchSize 値。

:max_time_ms

cursor_command

getMore コマンドで送信する maxTimeMS 値。初期コマンドに制限時間を設定するには、コマンドドキュメントに maxTimeMS フィールドを含めます。

:comment

cursor_command

getMore コマンドに添付するコメント。

:cursor_type

cursor_command

カーソルタイプ。:tailable または :tailable_await です。この値は、コマンドドキュメントで設定されたフラグと一致する必要があります。

:timeout_mode

cursor_command

タイムアウトモード。:cursor_lifetime または :iteration です。

command メソッドと cursor_command メソッドは、Database インスタンスの読み込み設定 (read preference) を継承しません。

次のコードに示すように、command メソッドに :read オプションを渡すことで、コマンド実行の読み込み設定 (read preference) を設定できます。

database.command({hello: 1}, read: {mode: :secondary})

Tip

読み込み設定( 読み込み設定 (read preference) )オプションの詳細については、 MongoDB Serverマニュアルの読み込み設定(read preference) を参照してください。

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

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。