Docs Menu
Docs Home
/ / /
PHP ライブラリ マニュアル
/

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

項目一覧

  • Overview
  • 単一の結果ドキュメントを返すコマンド
  • 複数の結果を生成するコマンド
  • カスタム読み込み設定(read preference)の指定

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)
}
}

戻る

照合