データベースコマンドを実行する
Overview
MongoDB PHP ライブラリは、一般的なClient
Database
Collection
データベース コマンド の 、 、および クラスにわたるヘルパー メソッドを提供します。さらに、 MongoDB\Database::command()
メソッドは、ヘルパー メソッドがないデータベースコマンドを実行するために使用できます。
MongoDB\Database::command()
メソッドは常に MongoDB\Driver\Cursor を返します オブジェクトは、コマンドカーソルを介して単一の結果ドキュメント と 複数の結果を返すコマンドの実行をサポートする必要があるためです。
単一の結果ドキュメントを返すコマンド
ほとんどのデータベースコマンドは結果ドキュメントを 1 つ返します。このドキュメントは、返されたカーソルを配列に変換し、その最初の要素にアクセスすることで取得できます。 次の例では、 pingコマンドを実行し、その結果ドキュメントを出力します。
$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()
が使用されます。
$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() メソッドがこのような応答を検出した場合、生の 結果ドキュメントの代わりに反復可能な コマンドカーソルを構築して返します。必要に応じて、コマンド モニタリングを使用して未加工の結果ドキュメントを監視できます。
カスタム読み込み設定(read preference)の指定
createUser などの書込みコマンドは、書込み可能なサーバー(例:プライマリレプリカセットノード)。 MongoDB PHPライブラリのコマンドヘルパーメソッド( など)は、必要に応じて独自の読み込み設定(MongoDB\Database::drop()
読み込み設定 (read preference) )を適用することを認識しています。ただし、MongoDB\Database::command()
メソッドはジェネリック メソッドであり、デフォルトでは、このメソッドが呼び出されるデータベースオブジェクトの読み込み設定( 読み込み設定 (read preference) )が設定されます。必要に応じて、readPreference
オプションを使用してデフォルトの読み込み設定( 読み込み設定 (read preference))を上書きできます。
次の例では、クラスターに接続し、クライアントのデフォルトの読み取り設定としてsecondaryPreferred
を指定しています。 次に、 test
データベースでcreateUser
コマンドを実行するときに、 primary
読み込み設定(read preference)が指定されます。
$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) } }