Получение всех пользователей, у которых есть хотя бы одно событие "sale", и сколько раз
каждый из этих пользователей совершил распродажу.
<?php
// пример документа о событии
$events->insert(array("user_id" => $id,
"type" => $type,
"time" => new MongoDate(),
"desc" => $description));
// конструктор карты и 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']} принял участие в {$user['value']} распродажах.\n";
}
?>
Результатом выполнения данного примера
будет что-то подобное:
Замечание:
Использование MongoCode
В этом примере используется MongoCode, который также может
принимать аргумент scope. Однако в настоящее время MongoDB не поддерживает использование
scope в MapReduce. Если вы хотите использовать переменные на стороне клиента в
функциях MapReduce, вы можете добавить их в глобальную область, используя
необязательное поле scope с командой базы данных. Смотрите
» документацию MapReduce
для получения дополнительной информации.