MongoDB\Driver\Manager::executeCommand

(mongodb >=1.0.0)

MongoDB\Driver\Manager::executeCommandВыполняет команду базы данных

Описание

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

Выбирает сервер в соответствии с опцией "readPreference" и выполняет команду на этом сервере. По умолчанию будет выбран основной сервер.

Этот метод не применяет особую логику к команде. Хотя этот метод принимает "readConcern" и "writeConcern", которые будут включены в документы коанды, эти опции не будут соответствовать значениям по умолчанию из MongoDB URI соединения , и не будет учитываться версия сервера MongoDB. Поэтому пользователям рекомендуется использовать конкретные методы команды чтения и/или записи если это возможно.

Список параметров

db (string)

Имя базы данных, в которой запускается команда.

command (MongoDB\Driver\Command)

Команда для выполнения.

options

options
ОпцияТипОписание
readConcernMongoDB\Driver\ReadConcern

Гарантия чтения для применения к операции.

Эта опция доступна в MongoDB 3.2+ и приведёт к исключению во время выполнения, если указана для более старой версии сервера.

readPreferenceMongoDB\Driver\ReadPreference

Предпочтение чтения, используемая для выбора сервера для выполнения операции.

sessionMongoDB\Driver\Session

Сессия для связывания с операцией.

writeConcernMongoDB\Driver\WriteConcern

Гарантия записи для применения к операции.

Внимание

При использовании "session" и наличии незавершённых транзакций, вы не можете указать "readConcern" or "writeConcern" option. Это приведёт к выбрасыванию исключения MongoDB\Driver\Exception\InvalidArgumentException. Вместо этого вы должны установить эти две опции при создании транзакции с помощью MongoDB\Driver\Session::startTransaction().

Возвращаемые значения

В случае успешного выполнения возвращает MongoDB\Driver\Cursor.

Ошибки

Список изменений

ВерсияОписание
PECL mongodb 1.4.4 Если опция "session" используется в сочетании с неподтверждённой гарантией записи, выбрасывается исключение MongoDB\Driver\Exception\InvalidArgumentException.
PECL mongodb 1.4.0 Третий параметр теперь представляет собой массив options. Для обратной совместимости этот параметр всё равно примет объект MongoDB\Driver\ReadPreference.

Примеры

Пример #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;
}


$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);


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 Ограничение времени выполнения запроса

Опция "maxTimeMS" класса MongoDB\Driver\Query может использоваться для ограничения времени выполнения запроса. Обратите внимание, что этот срок применяется на стороне сервера и не учитывает задержки сети. Смотрите » Завершение выполнения операций в руководстве MongoDB для получения дополнительной информации.

<?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.

Примечания

Замечание: Если будет использован вторичный сервер из опции readPreference, то вызывающий код берёт на себя ответственность за гарантию выполнения команды command на вторичном узле. Драйвер не выполняет проверку.

Замечание: Этот метод — не метод по умолчанию, чтобы получить предпочтения чтения из URI-адреса подключения MongoDB. Приложения, которым нужно это поведение, могут вызывать метод MongoDB\Driver\Manager::executeReadCommand().

Смотрите также

To Top