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.