MongoDB\Driver\Manager::executeCommand
(mongodb >=1.0.0)
MongoDB\Driver\Manager::executeCommand — Выполняет команду базы данных
Описание
$db
, MongoDB\Driver\Command $command
, array $options
= array()
) : MongoDB\Driver\Cursor
Выбирает сервер в соответствии с опцией "readPreference"
и выполняет запрос на этом сервере.
По умолчанию будет использоваться предпочтение чтения из URI
URI подключения MongoDB.
Этот метод не применяет особую логику к команде. Хотя этот метод
принимает "readConcern"
и
"writeConcern"
, которые будут включены в
документы коанды, эти опции не будут соответствовать значениям по умолчанию
из MongoDB
URI соединения , и не будет учитываться версия сервера MongoDB.
Поэтому пользователям рекомендуется использовать конкретные методы команды чтения и/или записи
если это возможно.
Список параметров
-
db
(string) -
Имя базы данных, в которой запускается комманда.
-
command
(MongoDB\Driver\Command) -
Команда для выполнения.
-
options
-
options Опция Тип Описание readConcern MongoDB\Driver\ReadConcern Гаранатия чтения для применения к операции.
Эта опция доступна в MongoDB 3.2+ и приведет к исключению во время выполнения, если указана для более старой версии сервера.
readPreference MongoDB\Driver\ReadPreference Предпочтение чтения, используемая для выбора сервера для выполнения операции.
session MongoDB\Driver\Session Сессия для связывания с операцией.
writeConcern MongoDB\Driver\WriteConcern Гаранатия записи для применения к операции.
ВниманиеПри использовании
"session"
и наличии незавершенных транзакций, вы не можете указать"readConcern"
or"writeConcern"
option. Это приведет к выбрасыванию исключения MongoDB\Driver\Exception\InvalidArgumentException. Вместо этого вы должны установить эти две опции при создании транзакции с помощью MongoDB\Driver\Session::startTransaction().
Возвращаемые значения
В случае успеха возвращает MongoDB\Driver\Cursor.
Ошибки
- Выбрасывается 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 |
Если опция "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;
}
/* Команда ping возвращает одиночный результат, поэтому мы должны получить доступ к
* первому результату в курсор. */
$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);
/* Команда aggragete опционально может вернуть результаты в курсоре вместо
* одиночного документа. В таком случае мы можем перебирать на курсоре для
* непосредственного доступа к результатам. */
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
может быть выполнен на вторичном узле. Проверка не выполняется драйвером.
Смотрите также
- MongoDB\Driver\Command
- MongoDB\Driver\Cursor
- MongoDB\Driver\Manager::executeReadCommand() - Выполняет команду базы данных, которая читает
- MongoDB\Driver\Manager::executeReadWriteCommand() - Выполняет команду базы данных, которая читает и пишет
- MongoDB\Driver\Manager::executeWriteCommand() - Выполняет команду базы данных, которая пишет
- MongoDB\Driver\Server::executeCommand() - Выполнить команду базы данных на сервере