Dutch PHP Conference 2025 - Call For Papers

MongoDB\Driver\Manager::executeCommand

(mongodb >=1.0.0)

MongoDB\Driver\Manager::executeCommandExecute a database command

Опис

final public MongoDB\Driver\Manager::executeCommand(string $db, MongoDB\Driver\Command $command, array|MongoDB\Driver\ReadPreference|null $options = null): MongoDB\Driver\Cursor

Selects a server according to the "readPreference" option and executes the command on that server.

This method applies no special logic to the command. The Default values for the "readPreference", "readConcern", and "writeConcern" options will be inferred from an active transaction (indicated by the "session" option). If there is no active transaction, a primary read preference will be used for server selection.

Default values will not be inferred from the connection URI. Users are therefore encouraged to use specific read and/or write command methods if possible.

Параметри

db (string)

Назва бази даних, в якій буде виконано команду.

command (MongoDB\Driver\Command)

Команда, яку потрібно виконати.

options

options
Option Type Description
readConcern MongoDB\Driver\ReadConcern

Вимога щодо зчитування.

Цей параметр доступний в MongoDB 3.2+, тож його застосування у старіших версіях викине виключення під час виконання.

readPreference MongoDB\Driver\ReadPreference

Параметр читання для вибору сервера для операції.

session MongoDB\Driver\Session

Сеанс, по'язаний з операцією.

writeConcern MongoDB\Driver\WriteConcern

Вимога щодо запису.

Увага

Для сеансу ("session") транзакції, яка триває, не можна задати параметр "readConcern" або "writeConcern". Це призведе до викидання виключення MongoDB\Driver\Exception\InvalidArgumentException. Ці два параметри потрібно задавати під час створення транзакції методом MongoDB\Driver\Session::startTransaction().

Значення, що повертаються

У разі успіху повертає примірника MongoDB\Driver\Cursor.

Помилки/виключення

Журнал змін

Версія Опис
PECL mongodb 1.4.4 MongoDB\Driver\Exception\InvalidArgumentException will be thrown if the "session" option is used in combination with an unacknowledged write concern.
PECL mongodb 1.4.0 The third parameter is now an options array. For backwards compatibility, this paramater will still accept a MongoDB\Driver\ReadPreference object.

Приклади

Приклад #1 MongoDB\Driver\Manager::executeCommand() with a command returning a single result document

<?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() with a command returning a cursor

<?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 Limiting execution time for a command

The execution time of a command may be limited by specifying a value for "maxTimeMS" in the MongoDB\Driver\Command document. Note that this time limit is enforced on the server side and does not take network latency into account. See » Terminate Running Operations in the MongoDB manual for more information.

<?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]);

?>

If the command fails to complete after one second of execution time on the server, a MongoDB\Driver\Exception\ExecutionTimeoutException will be thrown.

Примітки

Зауваження: If a secondary readPreference is used, it is the caller's responsibility to ensure that the command can be executed on a secondary. No validation is done by the driver.

Зауваження: This method does not default to using the read preference from the MongoDB Connection URI. Applications in need of that behavior should consider using MongoDB\Driver\Manager::executeReadCommand().

Прогляньте також

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top