PHP8 MongoDB\Driver\Manager::executeCommand

2024-04-08 10:15 更新

(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+ 中可用,将导致 如果为较旧的服务器指定了执行时的异常 版本。

readPreferenceMongoDB\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.4MongoDB\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() - 在此服务器上执行数据库命令


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号