(PECL mongo >=0.9.2)
MongoDB::command — Exécute une commande de base de données
$command
[, array $options
= array()
] )Tout ce qui n'est pas une opération CRUD peut être effectué avec une commande de base de données. Besoin de connaitre la version de la base de données ? Il y a une commande pour cela. Besoin de faire une agrégation ? Il y a une commande pour cela. Besoin d'activer l'historisation ? Vous voyez l'idée ?
Cette méthode est équivalente à :
<?php
public function command($data) {
return $this->selectCollection('$cmd')->findOne($data);
}
?>
command
La requête à envoyer.
options
Ce paramètre est un tableau associatif sous la forme array("optionname" => <boolean>, ...). Actuellement, les options supportées sont :
"timeout"
Entier, par défaut, Mongo::$timeout. Si "safe" est défini, ce sera le délai d'attente (en millisecondes) du client d'une réponse de la base de données. Si la base de données ne répond pas dans ce délai, une exception de type MongoCursorTimeoutException sera émise.
Version | Description |
---|---|
1.2.0 | Ajout du paramètre options avec une seule option : timeout. |
Retourne la réponse de la base de données.
Exemple #1 Exemple avec MongoDB::command() et "distinct"
Trouver tous les valeurs distinctes pour une clé.
<?php
$people = $db->people;
$people->insert(array("name" => "Joe", "age" => 4));
$people->insert(array("name" => "Sally", "age" => 22));
$people->insert(array("name" => "Dave", "age" => 22));
$people->insert(array("name" => "Molly", "age" => 87));
$ages = $db->command(array("distinct" => "people", "key" => "age"));
foreach ($ages['values'] as $age) {
echo "$age\n";
}
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
Exemple #2 Exemple avec MongoDB::command() et "distinct"
Récupère toutes les valeurs distinctes pour une clé, pour laquelle la valeur est supérieure ou égale à 18.
<?php
$people = $db->people;
$people->insert(array("name" => "Joe", "age" => 4));
$people->insert(array("name" => "Sally", "age" => 22));
$people->insert(array("name" => "Dave", "age" => 22));
$people->insert(array("name" => "Molly", "age" => 87));
$ages = $db->command(
array(
"distinct" => "people",
"key" => "age",
"query" => array("age" => array('$gte' => 18))
)
);
foreach ($ages['values'] as $age) {
echo "$age\n";
}
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
Exemple #3 Exemple avec MongoDB::command() et MapReduce
Récupérer tous les utilisateurs avec au moins un événement "sale", et savoir le nombre de fois chacun de ces utilisateurs ont eu une vente.
<?php
// Document d'événement simple
$events->insert(array("user_id" => $id,
"type" => $type,
"time" => new MongoDate(),
"desc" => $description));
// Construit les fonctions map et reduce
$map = new MongoCode("function() { emit(this.user_id,1); }");
$reduce = new MongoCode("function(k, vals) { ".
"var sum = 0;".
"for (var i in vals) {".
"sum += vals[i];".
"}".
"return sum; }");
$sales = $db->command(array(
"mapreduce" => "events",
"map" => $map,
"reduce" => $reduce,
"query" => array("type" => "sale"),
"out" => array("merge" => "eventCounts")));
$users = $db->selectCollection($sales['result'])->find();
foreach ($users as $user) {
echo "{$user['_id']} had {$user['value']} sale(s).\n";
}
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
Note: Utilisation de MongoCode
Cet exemple utilise la méthode MongoCode, qui prend également comme argument le scope. Cependant, actuellement, Mongo ne supporte pas l'utilisation d'un scope dans MapReduce. Si vous voulez utiliser des variables définies côté client dans les fonctions MapReduce, vous pouvez les ajouter au scope global en utilisant le champ optionnel scope avec la commande de la base de données. Voir la » documentation de MapReduce pour plus d'informations.
Note: L'argument out
Avant la version 1.8.0, l'argument out était optionnel. Si vous ne l'utilisiez pas, les résultats de MapReduce étaient écrits dans une collection temporaire, qui était supprimée lors de la fermeture de la collection. En version 1.8.0+, l'argument out est obligatoire. Reportez-vous à la » documentation sur MapReduce pour plus d'informations.
Si vous souhaitez utiliser MapReduce, Prajwal Tuladhar a créé une API pour les utilisateurs PHP de Mongo qui fournit une interface au lieu d'utiliser les commandes de base. Vous pouvez la télécharger depuis » Github et il y a un » article sur son blog expliquant comment l'utiliser.
La documentation principale MongoDB sur les » commandes de base de données. Aussi, quelques commandes individuelles : » findAndModify, » getLastError, et » repair.