MongoCollection::group
(PECL mongo >=0.9.2)
MongoCollection::group — Effecture une opération de regroupement
Description
Liste de paramètres
-
keys
-
Les champs avec lesquels faire le regroupement. Si un tableau ou un objet non-code est passé, ce sera la clé utilisée pour grouper les résultats.
1.0.4+: Si
keys
est une instance de MongoCode,keys
sera considéré comme une fonction qui retourne la clé pour effectuer le regroupement (voir l'exemple ci-dessous sur le passage d'une fonctionkeys
). -
initial
-
Valeur initiales des compteurs d'agrégation.
-
reduce
-
Fonction acceptant deux arguments (le document courant et l'agrégation à ce point) et effectue l'agrégation.
-
options
-
Paramètres optionnels pour la commande de groupe. Les options accéptées sont:
-
"condition"
Critère pour inclure un document dans l'agrégation.
-
"finalize"
Fonction appelée une fois par clé unique qui prend le rendu final de la fonction de réduction.
"maxTimeMS"
Spécifie une limite cumulative de temps, en millisecondes, pour procéder à l'opération (n'inclut pas le temps d'inactivité). Si l'opération n'est pas terminée durant cette période, une exception MongoExecutionTimeoutException sera émise.
-
Historique
Version | Description |
---|---|
1.5.0 | Ajout de l'option "maxTimeMS". |
1.2.11 |
Lance une alerte de niveau E_DEPRECATED lorsque
le paramètre options est de type scalar.
|
Exemples
Exemple #1 Exemple avec MongoCollection::group()
Cet exemple regroupe des documents par catégorie et crée une liste de noms à l'intérieur des catégories
<?php
$collection->insert(array("category" => "fruit", "name" => "apple"));
$collection->insert(array("category" => "fruit", "name" => "peach"));
$collection->insert(array("category" => "fruit", "name" => "banana"));
$collection->insert(array("category" => "veggie", "name" => "corn"));
$collection->insert(array("category" => "veggie", "name" => "broccoli"));
$keys = array("category" => 1);
$initial = array("items" => array());
$reduce = "function (obj, prev) { prev.items.push(obj.name); }";
$g = $collection->group($keys, $initial, $reduce);
echo json_encode($g['retval']);
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
[{"category":"fruit","items":["apple","peach","banana"]},{"category":"veggie","items":["corn","broccoli"]}]
Exemple #2 Exemple avec MongoCollection::group()
Cet exemple n'utilise aucune clé, donc chaque document sera dans son propre groupe. Il y a aussi une condition: seuls les documents qui correspondent à cette condition seront traités par la fonction de regroupement.
$collection->save(array("a" => 2));
$collection->save(array("b" => 5));
$collection->save(array("a" => 1));
// Utilisation de tous les champs
$keys = array();
// Défini les valeurs initiales
$initial = array("count" => 0);
// Fonction JavaScript pour traitement
$reduce = "function (obj, prev) { prev.count++; }";
// N'utilisez que les documents où le champ "a" est plus grand que 1
$condition = array('condition' => array("a" => array( '$gt' => 1)));
$g = $collection->group($keys, $initial, $reduce, $condition);
var_dump($g);
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
array(4) { ["retval"]=> array(1) { [0]=> array(1) { ["count"]=> float(1) } } ["count"]=> float(1) ["keys"]=> int(1) ["ok"]=> float(1) }
Exemple #3 Passer une fonction keys
Si vous voulez grouper par quelque chose d'autre qu'un nom de champ, vous pouvez passer une fonction comme premier paramètre à la méthode MongoCollection::group() et elle sera exécutée sur chacun des documents. La valeur retournée de cette fonction sera utilisée comme valeur de regroupement.
Cet exemple montre comment regrouper par le numéro du champ, modulo 4.
<?php
$c->group(new MongoCode('function(doc) { return {mod : doc.num % 4}; }'),
array("count" => 0),
new MongoCode('function(current, total) { total.count++; }'));
?>
Version en cache
09/01/2025 07:27:19 Cette version de la page est en cache (à la date du 09/01/2025 07:27:19) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-mongocollection.group.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.