MongoDB\Driver\Manager::executeCommand
En esta página
MongoDB\Driver\Manager::executeCommand
Ejecuta un comando de base de datos
Descripción#
final public MongoDB\Driver\Manager::executeCommand(string $db, MongoDB\Driver\Command $command, [array $options]): MongoDB\Driver\Cursor
```php
Selecciona un servidor en función de la opción `"readPreference"` y ejecuta el comando en ese servidor.
Este método no aplica ninguna lógica especial al comando. Los valores por defecto de las opciones `"readPreference"`, `"readConcern"` y `"writeConcern"` serán deducidos a partir de una transacción activa (indicada por la opción `"session"`). Si no hay una transacción activa, se utilizará una preferencia de lectura primaria para la selección del servidor.
Los valores por defecto no serán *no* deducidos a partir de la [URI de conexión](#mongodb-driver-manager.construct-uri). Por lo tanto, se recomienda a los usuarios utilizar métodos de comando de lectura y/o escritura específicos si es posible.
## Parámetros
`db` (`string`)
El nombre de la base de datos sobre la cual se ejecutará el comando.
`command` (`MongoDB\Driver\Command`)
El comando a ejecutar.
`options`
<table>
<caption>options</caption>
<thead>
<tr>
<th>Opción</th>
<th>Tipo</th>
<th>Descripción</th>
</tr>
</thead>
<tbody>
<tr>
<td>readConcern</td>
<td><code>MongoDB\Driver\ReadConcern</code></td>
<td><p>Una preocupación de lectura a aplicar a la operación.</p>
<p>Esta opción está disponible en MongoDB 3.2+ y se traducirá en una excepción en el momento de la ejecución si se especifica para una versión más antigua del servidor.</p></td>
</tr>
<tr>
<td>readPreference</td>
<td><code>MongoDB\Driver\ReadPreference</code></td>
<td><p>Una preferencia de lectura a utilizar para seleccionar un servidor para la operación.</p></td>
</tr>
<tr>
<td>session</td>
<td><code>MongoDB\Driver\Session</code></td>
<td><p>Una sesión a asociar a la operación.</p></td>
</tr>
<tr>
<td>writeConcern</td>
<td><code>MongoDB\Driver\WriteConcern</code></td>
<td><p>Una preocupación de escritura a aplicar a la operación.</p></td>
</tr>
</tbody>
</table>
> [!WARNING]
> Si se utiliza una `"session"` que tiene una transacción en curso, no se puede especificar la opción `"readConcern"` o `"writeConcern"`. Intentar hacer esto lanzará una excepción `MongoDB\Driver\Exception\InvalidArgumentException` . En su lugar, debe definir estas opciones cuando se crea la transacción con MongoDB\Driver\Session::startTransaction.
## Valores devueltos
Retorna un `MongoDB\Driver\Cursor` en caso de éxito.
## Errores/Excepciones
Lanza una excepción
MongoDB\Driver\Exception\InvalidArgumentException
si la opción
"session"
se utiliza con una transacción asociada en combinación con una opción
"readConcern"
o
"writeConcern"
.
Lanza una excepción
MongoDB\Driver\Exception\InvalidArgumentException
si la opción
"session"
se utiliza junto con una preocupación de escritura no reconocida.
Lanza una excepción
MongoDB\Driver\Exception\InvalidArgumentException
en caso de error durante el análisis de un argumento.
Lanza una excepción
MongoDB\Driver\Exception\ConnectionException
si la conexión al servidor falla por una razón distinta a un problema de identificación
Lanza una excepción
MongoDB\Driver\Exception\AuthenticationException
si se requiere una identificación pero falla
Lanza una
MongoDB\Driver\Exception\RuntimeException
en otros errores (por ejemplo: comando inválido, entrega de un comando de escritura a un secundario).
## Historial de cambios
| Versión | Descripción |
|----|----|
| PECL mongodb 2.0.0 | El parámetro `options` ya no acepta una instancia de `MongoDB\Driver\ReadPreference`. |
| PECL mongodb 1.21.0 | Pasar un objeto `MongoDB\Driver\ReadPreference` como `options` está obsoleto y será eliminado en la 2.0. |
| PECL mongodb 1.4.4 | Se lanzará una `MongoDB\Driver\Exception\InvalidArgumentException` si la opción `"session"` se utiliza en combinación con una preferencia de escritura no reconocida. |
| PECL mongodb 1.4.0 | Este tercer parámetro es ahora un array de `options`. Por razones de compatibilidad ascendente, este parámetro siempre aceptará un objeto `MongoDB\Driver\ReadPreference`. |
## Ejemplos
`MongoDB\Driver\Manager::executeCommand` con un comando que devuelve un solo documento de resultado
El ejemplo anterior mostrará:
array(1) {
["ok"]=>
float(1)
}
`MongoDB\Driver\Manager::executeCommand` con un comando que devuelve un cursor
El ejemplo anterior mostrará:
object(stdClass)#6 (2) {
["_id"]=>
string(3) "bar"
["sum"]=>
int(10)
}
object(stdClass)#7 (2) {
["_id"]=>
string(3) "foo"
["sum"]=>
int(2)
}
Limitar el tiempo de ejecución de un comando
El tiempo de ejecución de un comando puede ser limitado especificando un valor para `"maxTimeMS"` en el documento `MongoDB\Driver\Command`. Tenga en cuenta que este límite de tiempo se aplica en el lado del servidor y no tiene en cuenta la latencia de la red. Ver [Terminar las operaciones en curso ](https://www.mongodb.com/docs/manual/tutorial/terminate-running-operations/#maxtimems) en el manual de MongoDB para más información.
```php
Si el comando no logra completarse después de un segundo de ejecución en el servidor, se lanzará una MongoDB\Driver\Exception\ExecutionTimeoutException.
Notas#
[!NOTE] Si se utiliza una segunda
readPreference, es responsabilidad del llamante asegurarse de que elcomandopueda ser ejecutado en un secundario. No se realiza ninguna validación por parte del controlador.[!NOTE] Este método no utiliza por defecto la preferencia de lectura de la URI de conexión MongoDB. Las aplicaciones que lo necesiten deberían considerar el uso de
MongoDB\Driver\Manager::executeReadCommand.
Véase también#
MongoDB\Driver\Command
MongoDB\Driver\Cursor
MongoDB\Driver\Manager::executeReadCommand
MongoDB\Driver\Manager::executeReadWriteCommand
MongoDB\Driver\Manager::executeWriteCommand
MongoDB\Driver\Server::executeCommand