PHP8 MongoDB\Driver\Manager::executeCommand
(mongoDB >=1.0.0)
MongoDB\Driver\Manager::executeCommand — 执行数据库命令
说明
final public MongoDB\Driver\Manager::executeCommand(string $db, MongoDB\Driver\Command $command, array|MongoDB\Driver\ReadPreference|null $options = null): MongoDB\Driver\Cursor
根据选项选择服务器 并在该服务器上执行该命令。默认情况下,主服务器将 被选中。"readPreference"
此方法不对命令应用任何特殊逻辑。虽然这种方法 接受和选项,它们将被合并到 命令文档中,这些选项不会默认为相应的值 从 MongoDB 连接 URI 也不会考虑 MongoDB 服务器版本 帐户。因此,鼓励用户使用特定的读取和/或写入 命令方法(如果可能)。"readConcern""writeConcern"
参数
db
(字符串)要在其上执行命令的数据库的名称。
command
(MongoDB\驱动程序\命令)要执行的命令。
options
选项 选择 类型 描述 read关注 MongoDB\驱动程序\ReadConcern 要应用于操作的读取关注点。
此选项在 MongoDB 3.2+ 中可用,将导致 如果为较旧的服务器指定了执行时的异常 版本。
readPreference MongoDB\Driver\ReadPreference 用于为操作选择服务器的读取首选项。
会期 MongoDB\驱动程序\会话 要与操作关联的会话。
写关注点 MongoDB\驱动程序\WriteConcern 要应用于操作的写入关注点。
警告如果您使用的是具有事务的 在进行中,不能指定 OR 选项。这将导致引发 MongoDB\Driver\Exception\InvalidArgumentException。相反,您应该在创建时设置这两个选项 使用 MongoDB\Driver\Session::startTransaction() 的事务。
"session"
"readConcern"
"writeConcern"
返回值
成功后返回 MongoDB\Driver\Cursor。
错误/异常
- 如果该选项与与 or 选项结合使用的关联事务一起使用,则引发 MongoDB\Driver\Exception\InvalidArgumentException。"session""readConcern""writeConcern"
- 如果该选项与未确认的写入问题结合使用,则引发 MongoDB\Driver\Exception\InvalidArgumentException。"session"
- 在参数分析错误时抛出 MongoDB\Driver\Exception\InvalidArgumentException。
- 如果与服务器的连接失败(由于身份验证以外的原因),则抛出 MongoDB\Driver\Exception\ConnectionException。
- 如果需要身份验证并失败,则抛出 MongoDB\Driver\Exception\AuthenticationException。
- 在其他错误(例如,无效命令,向辅助命令发出写入命令)时抛出 MongoDB\Driver\Exception\RuntimeException。
更新日志
版本 | 说明 |
---|---|
PECL mongodb 1.4.4 | MongoDB\Driver\Exception\InvalidArgumentException,如果在 与未确认的写入问题相结合。"session" |
PECL mongodb 1.4.0 | 第三个参数现在是一个数组。 为了向后兼容,此参数仍将接受 MongoDB\Driver\ReadPreference 对象。options |
示例
示例 #1 MongoDB\Driver\Manager::executeCommand() 带有返回单个结果文档的命令
<?php
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$command = new MongoDB\Driver\Command(['ping' => 1]);
try {
$cursor = $manager->executeCommand('admin', $command);
} catch(MongoDB\Driver\Exception $e) {
echo $e->getMessage(), "\n";
exit;
}
/* The ping command returns a single result document, so we need to access the
* first result in the cursor. */
$response = $cursor->toArray()[0];
var_dump($response);
?>
以上示例会输出:
array(1) { ["ok"]=> float(1) }
示例 #2 MongoDB\Driver\Manager::executeCommand() 带有返回游标的命令
<?php
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->insert(['x' => 1, 'y' => 'foo']);
$bulk->insert(['x' => 2, 'y' => 'bar']);
$bulk->insert(['x' => 3, 'y' => 'bar']);
$manager->executeBulkWrite('db.collection', $bulk);
$command = new MongoDB\Driver\Command([
'aggregate' => 'collection',
'pipeline' => [
['$group' => ['_id' => '$y', 'sum' => ['$sum' => '$x']]],
],
'cursor' => new stdClass,
]);
$cursor = $manager->executeCommand('db', $command);
/* The aggregate command can optionally return its results in a cursor instead
* of a single result document. In this case, we can iterate on the cursor
* directly to access those results. */
foreach ($cursor as $document) {
var_dump($document);
}
?>
以上示例会输出:
object(stdClass)#6 (2) { ["_id"]=> string(3) "bar" ["sum"]=> int(10) } object(stdClass)#7 (2) { ["_id"]=> string(3) "foo" ["sum"]=> int(2) }
示例 #3 限制命令的执行时间
可以通过在 MongoDB\Driver\Command 文档中指定 for 的值来限制命令的执行时间。请注意,这一次 limit 在服务器端强制执行,不会将网络延迟考虑在内 帐户。有关详细信息,请参阅 MongoDB 手册中的 » 终止正在运行的操作。"maxTimeMS"
<?php
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$command = new MongoDB\Driver\Command([
'count' => 'collection',
'query' => ['x' => ['$gt' => 1]],
'maxTimeMS' => 1000,
]);
$cursor = $manager->executeCommand('db', $command);
var_dump($cursor->toArray()[0]);
?>
如果命令在执行一秒钟后无法完成 服务器,则将抛出 MongoDB\Driver\Exception\ExecutionTimeoutException。
注释
注意: 如果使用辅助 readReference,则它是 调用方负责确保可以在辅助设备上执行命令。无验证 由司机完成。
注意: 此方法不默认使用MongoDB连接中的读取首选项 URI中。需要该行为的应用程序应考虑使用 MongoDB\Driver\Manager::executeReadCommand()。
参见
- MongoDB\驱动程序\命令
- MongoDB\驱动程序\游标
- MongoDB\Driver\Manager::executeReadCommand() - 执行读取
- MongoDB\Driver\Manager::executeReadWriteCommand() - 执行读取和写入的数据库命令
- MongoDB\Driver\Manager::executeWriteCommand() - 执行一个数据库命令,该命令将
- MongoDB\Driver\Server::executeCommand() - 在此服务器上执行数据库命令