PHP Conference Nagoya 2025

MongoDB\Driver\Manager::executeCommand

(mongodb >=1.0.0)

MongoDB\Driver\Manager::executeCommandExécute une commande de base de données

Description

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

Sélectionne un serveur en fonction de l'option "readPreference" et exécute la commande sur ce serveur.

Cette méthode n'applique aucune logique spéciale à la commande. Les valeurs par défaut des options "readPreference", "readConcern" et "writeConcern" seront déduites à partir d'une transaction active (indiquée par l'option "session"). S'il n'y a pas de transaction active, une préférence de lecture primaire sera utilisée pour la sélection du serveur.

Les valeurs par défaut ne seront pas déduites à partir de l'URI de connexion. Il est donc recommandé aux utilisateurs d'utiliser des méthodes de commande de lecture et/ou d'écriture spécifiques si possible.

Liste de paramètres

db (string)

Le nom de la base de données sur laquelle la commande sera exécutée.

command (MongoDB\Driver\Command)

La commande à exécuter.

options

options
Option Type Description
readConcern MongoDB\Driver\ReadConcern

Une préoccupation de lecture à appliquer à l'opération.

Cette option est disponible dans MongoDB 3.2+ et se traduira par une exception au moment de l'exécution si elle est spécifiée pour une version plus ancienne du serveur.

readPreference MongoDB\Driver\ReadPreference

Une préférence de lecture à utiliser pour sélectionner un serveur pour l'opération.

session MongoDB\Driver\Session

Une session à associer à l'opération.

writeConcern MongoDB\Driver\WriteConcern

Une préoccupation d'écriture à appliquer à l'opération.

Avertissement

Si vous utilisez une "session" qui a une transaction en cours, vous ne pouvez pas spécifier l'option "readConcern" ou "writeConcern". Tenter de faire ceci lancera une exception MongoDB\Driver\Exception\InvalidArgumentException. À la place vous devriez définir ces options quand vous créez la transaction avec MongoDB\Driver\Session::startTransaction().

Valeurs de retour

Retourne un MongoDB\Driver\Cursor en cas de succès.

Erreurs / Exceptions

  • Throws MongoDB\Driver\Exception\InvalidArgumentException if the "session" option is used with an associated transaction in combination with a "readConcern" or "writeConcern" option.
  • Lance une exception MongoDB\Driver\Exception\InvalidArgumentException si l'option "session" est utilisée conjointement avec une préoccupation d'écriture non reconnu.
  • Lance une exception MongoDB\Driver\AuthenticationException si une identification est nécessaire mais qu'elle échoue
  • Lance une exception MongoDB\Driver\ConnectionException si la connexion au serveur échoue pour une autre raison qu'en raison d'un problème d'identification
  • Lance une MongoDB\Driver\Exception\RuntimeException sur d'autre erreurs (par exemple: commande invalide, délivrance d'une commande d'écriture à un secondaire).

Historique

Version Description
PECL mongodb 1.4.4 Une MongoDB\Driver\Exception\InvalidArgumentException sera lancée si l'option "session" est utilisée en combinaison avec une préférence d'écriture non reconnue.
PECL mongodb 1.4.0 Ce troisième paramètre est maintenant un tableau d'options. Pour des raisons de compatibilité ascendante, ce paramètre acceptera toujours un objet MongoDB\Driver\ReadPreference.

Exemples

Exemple #1 MongoDB\Driver\Manager::executeCommand() avec une commande retournant un seul document de résultat

<?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;
}

/* La commande ping retourne un seul document de résultat, nous devons donc
* accéder au premier résultat dans le curseur. */
$response = $cursor->toArray()[0];

var_dump($response);

?>

L'exemple ci-dessus va afficher :

array(1) {
  ["ok"]=>
  float(1)
}

Exemple #2 MongoDB\Driver\Manager::executeCommand() avec une commande retournant un curseur

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

/* La commande d'agrégation peut éventuellement retourner ses résultats dans
* un curseur au lieu d'un seul document de résultat. Dans ce cas, nous pouvons
* itérer directement sur le curseur pour accéder à ces résultats. */
foreach ($cursor as $document) {
var_dump($document);
}

?>

L'exemple ci-dessus va afficher :

object(stdClass)#6 (2) {
  ["_id"]=>
  string(3) "bar"
  ["sum"]=>
  int(10)
}
object(stdClass)#7 (2) {
  ["_id"]=>
  string(3) "foo"
  ["sum"]=>
  int(2)
}

Exemple #3 Limiter le temps d'exécution d'une commande

Le temps d'exécution d'une commande peut être limité en spécifiant une valeur pour "maxTimeMS" dans le document MongoDB\Driver\Command. Notez que cette limite de temps est appliquée côté serveur et ne prend pas en compte la latence du réseau. Voir » Terminer les opérations en cours dans le manuel MongoDB pour plus d'informations.

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

?>

Si la commande ne parvient pas à se terminer après une seconde d'exécution sur le serveur, une MongoDB\Driver\Exception\ExecutionTimeoutException sera lancée.

Notes

Note: Si un deuxième readPreference est utilisé, il est de la responsabilité de l'appelant de s'assurer que la commande peut être exécutée sur un secondaire. Aucune validation n'est effectuée par le pilote.

Note: Cette méthode n'utilise pas par défaut la préférence de lecture de l'URI de connexion MongoDB. Les applications qui en ont besoin devraient envisager d'utiliser MongoDB\Driver\Manager::executeReadCommand().

Voir aussi

add a note

User Contributed Notes

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