执行数据库命令
概述
本文档MongoDB PHP 库提供了在以下类中的辅助方法:Client、Database 和 Collection,用于常见的Client
、Database
和 Collection
。此外,可以使用 MongoDB\Database::command()
方法来运行没有辅助方法的数据库命令。数据库命令。此外,可以使用 MongoDB\Database::command()
方法来执行没有辅助方法的数据库命令。
MongoDB\Database::command()
方法始终返回一个 MongoDB\Driver\Cursor 对象,因为它必须支持执行返回单个结果文档和通过命令游标返回多个结果文档的命令。
返回单个结果文档的命令
大多数数据库命令返回单个结果文档,可以通过将返回的游标转换为数组并访问其第一个元素来获取。以下示例执行了一个 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() 方法检测到此类响应,它将构建一个可迭代的命令游标并返回,而不是原始结果文档。如果需要,仍然可以通过 命令监控。 来观察原始结果文档。
指定自定义读取偏好
只能在不包含只读服务器的可写服务器(例如主副本集成员)上执行命令,如 createUser。在MongoDB PHP 库中的命令辅助方法,例如 MongoDB\Database::drop()
,会在必要时应用它们自己的读取偏好。然而,MongoDB\Database::command()
方法是一个通用方法,默认使用其调用的数据库对象的读取偏好。在必要时,可以使用 readPreference
选项来覆盖默认的读取偏好。
以下示例连接到一个集群,并将 secondaryPreferred
指定为客户端的默认读取偏好。然后,在 test
数据库上执行 createUser
命令时,指定了一个 primary
读取偏好。
$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) } }