Docs Menu

データベースコマンドを実行する

MongoDB PHP ライブラリは、一般的なClient DatabaseCollectionデータベース コマンド の 、 、および クラスにわたるヘルパー メソッドを提供します。さらに、 MongoDB\Database::command()メソッドは、ヘルパー メソッドがないデータベースコマンドを実行するために使用できます。

MongoDB\Database::command()メソッドは常に MongoDB\Driver\Cursor を返します オブジェクトは、コマンドカーソルを介して単一の結果ドキュメント 複数の結果を返すコマンドの実行をサポートする必要があるためです。

ほとんどのデータベースコマンドは結果ドキュメントを 1 つ返します。このドキュメントは、返されたカーソルを配列に変換し、その最初の要素にアクセスすることで取得できます。 次の例では、 pingコマンドを実行し、その結果ドキュメントを出力します。

<?php
$database = (new MongoDB\Client)->test;
$cursor = $database->command(['ping' => 1]);
var_dump($cursor->toArray()[0]);

出力は次のようになります。

object(MongoDB\Model\BSONDocument)#11 (1) {
["storage":"ArrayObject":private]=>
array(1) {
["ok"]=>
float(1)
}
}

一部のデータベースコマンドは、複数の結果を持つカーソルを返します。 次の例ではlistCollectionsを実行します。これにより、 testデータベース内の各コレクションの結果ドキュメントを含むカーソルが返され、 foreachループを使用して結果が反復処理されます。 この例は、説明のためのものであることに注意してください。アプリケーションでは通常、実際にはMongoDB\Database::listCollections()が使用されます。

<?php
$database = (new MongoDB\Client)->test;
$cursor = $database->command(['listCollections' => 1]);
foreach ($cursor as $collection) {
echo $collection['name'], "\n";
}

出力は、次のようになります。

persons
posts
zips

注意

プロトコルレベルでは、カーソル経由で複数の結果を返すコマンドは、カーソルを構築するための重要な要素(カーソルのID、名前空間、および任意の結果のバッチする)を含む単一の結果ドキュメントを返します。拡張機能内のMongoDB $ Driver\Manager::executeCommand() メソッドがこのような応答を検出した場合、生の 結果ドキュメントの代わりに反復可能な コマンドカーソルを構築して返します。必要に応じて、コマンド モニタリングを使用して未加工の結果ドキュメントを監視できます。

createUser などの書込みコマンドは、書込み可能なサーバー(例:プライマリレプリカセットノード)。 MongoDB PHPライブラリのコマンドヘルパーメソッド( など)は、必要に応じて独自の読み込み設定(MongoDB\Database::drop() 読み込み設定 (read preference) )を適用することを認識しています。ただし、MongoDB\Database::command() メソッドはジェネリック メソッドであり、デフォルトでは、このメソッドが呼び出されるデータベースオブジェクトの読み込み設定( 読み込み設定 (read preference) )が設定されます。必要に応じて、readPreference オプションを使用してデフォルトの読み込み設定( 読み込み設定 (read preference))を上書きできます。

次の例では、クラスターに接続し、クライアントのデフォルトの読み取り設定としてsecondaryPreferredを指定しています。 次に、 testデータベースでcreateUserコマンドを実行するときに、 primary読み込み設定(read preference)が指定されます。

<?php
$client = new MongoDB\Client(
'mongodb+srv://cluster0.example.com',
['readPreference' => 'secondaryPreferred']
);
$client->test;
$cursor = $db->command(
[
'createUser' => 'username',
'pwd' => 'password',
'roles' => ['readWrite'],
],
[
'readPreference' => new MongoDB\Driver\ReadPreference('primary'),
]
);
var_dump($cursor->toArray()[0]);

出力は次のようになります。

object(MongoDB\Model\BSONDocument)#8 (1) {
["storage":"ArrayObject":private]=>
array(1) {
["ok"]=>
float(1)
}
}