MongoCollection::aggregate
(PECL mongo >=1.3.0)
MongoCollection::aggregate — Effectue une agrégation en utilisant le framework dédié
Description
$pipeline
[, array $op
[, array $...
]] )Le » framework agrégation de MongoDB fournit une façon de calculer des valeurs agrégées sans avoir à utiliser MapReduce. Bien que MapReduce soit performant, il est souvent plus compliqué que nécessaire pour des tâches d'agrégation simples, comme le calcul du total ou de la moyenne des valeurs d'un champ.
Cette méthode accepte soit une variable au début du pipeline des opérateurs, ou un tableau simple d'opérateurs constituant le pipeline.
Liste de paramètres
-
pipeline
-
Un tableau d'opérateurs de pipeline, ou juste le premier opérateur.
-
op
-
Le second opérateur de pipeline.
-
...
-
Des opérateurs de pipeline additionnels.
Valeurs de retour
Le résultat del'agrégation, sous la forme d'un tableau. La clé ok vaudra 1 en cas de succès, 0 si une erreur survient.
Erreurs / Exceptions
Lorsqu'une erreur survient, un tableau contenant les clés suivantes sera retourné :
- errmsg - contient la raison de l'échec
- code - le code erreur de l'échec
- ok - vaudra 0.
Exemples
Exemple #1 Exemple avec MongoCollection::aggregate()
<?php
$m = new Mongo;
$c = $m->selectDB("examples")->selectCollection("article");
$data = array (
'title' => 'this is my title',
'author' => 'bob',
'posted' => new MongoDate,
'pageViews' => 5,
'tags' => array ( 'fun', 'good', 'fun' ),
'comments' => array (
array (
'author' => 'joe',
'text' => 'this is cool',
),
array (
'author' => 'sam',
'text' => 'this is bad',
),
),
'other' =>array (
'foo' => 5,
),
);
$d = $c->insert($data, array("w" => 1));
$ops = array(
array(
'$project' => array(
"author" => 1,
"tags" => 1,
)
),
array('$unwind' => '$tags'),
array(
'$group' => array(
"_id" => array("tags" => '$tags'),
"authors" => array('$addToSet' => '$author'),
),
),
);
$results = $c->aggregate($ops);
var_dump($results);
?>
<?php
$m = new Mongo;
$c = $m->selectDB("test")->selectCollection("zips");
$out = $c->aggregate(array(
'$group' => array(
'_id' => '$state',
'totalPop' => array('$sum' => '$pop')
)
),
array(
'$match' => array('totalPop' => array('$gte' => 10*1000*1000))
)
);
var_dump($out);
?>
<?php
$m = new Mongo;
$c = $m->selectDB("test")->selectCollection("zips");
$out = $c->aggregate(
array(
'$group' => array(
'_id' => array('state' => '$state', 'city' => '$city' ),
'pop' => array('$sum' => '$pop' )
)
),
array(
'$group' => array(
'_id' => '$_id.state',
'avgCityPop' => array('$avg' => '$pop')
)
)
);
var_dump($out);
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
array(2) { ["result"]=> array(51) { [0]=> array(2) { ["_id"]=> string(2) "DC" ["avgCityPop"]=> float(303450) } [1]=> array(2) { ["_id"]=> string(2) "DE" ["avgCityPop"]=> float(14481.913043478) } [2]=> array(2) { ["_id"]=> string(2) "RI" ["avgCityPop"]=> float(18933.283018868) } [3]=> array(2) { ["_id"]=> string(2) "AL" ["avgCityPop"]=> float(7907.2152641879) } [4]=> array(2) { ["_id"]=> string(2) "NH" ["avgCityPop"]=> float(5232.320754717) } ... [45]=> array(2) { ["_id"]=> string(2) "WY" ["avgCityPop"]=> float(3359.9111111111) } [46]=> array(2) { ["_id"]=> string(2) "MN" ["avgCityPop"]=> float(5335.4865853659) } [47]=> array(2) { ["_id"]=> string(2) "OK" ["avgCityPop"]=> float(6155.7436399217) } [48]=> array(2) { ["_id"]=> string(2) "IL" ["avgCityPop"]=> float(9931.0182450043) } [49]=> array(2) { ["_id"]=> string(2) "WI" ["avgCityPop"]=> float(7323.0074850299) } [50]=> array(2) { ["_id"]=> string(2) "WV" ["avgCityPop"]=> float(2759.1953846154) } } ["ok"]=> float(1) }
Voir aussi
- Le » framework d'agrégation de MongoDB