php mongo runcommand,PHP: MongoDB::command - Manual

本文介绍如何使用PHP和MongoDB的MapReduce功能,统计那些至少参与过一次'sale'事件的用户,并显示他们各自的销售次数。通过例子展示了如何构造map和reduce函数,以及在1.8.0版本后out参数的使用。
摘要由CSDN通过智能技术生成

Пример #3 Пример использования MongoDB::command() MapReduce

Получение всех пользователей, у которых есть хотя бы одно событие "sale", и сколько раз

каждый из этих пользователей совершил распродажу.

<?php // пример документа о событии$events->insert(array("user_id"=>$id,"type"=>$type,"time"=> newMongoDate(),"desc"=>$description));// конструктор карты и reduce функции$map= newMongoCode("function() { emit(this.user_id,1); }");$reduce= newMongoCode("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 ($usersas$user) {

echo"{$user['_id']}принял участие в{$user['value']}распродажах.\n";

}?>

Результатом выполнения данного примера

будет что-то подобное:

User 47cc67093475061e3d9536d2 принял участие в 3 распродажах.

User 49902cde5162504500b45c2c принял участие в 14 распродажах.

User 4af467e4fd543cce7b0ea8e2 принял участие в 1 распродажах.

Замечание:

Использование MongoCode

В этом примере используется MongoCode, который также может

принимать аргумент scope. Однако в настоящее время MongoDB не поддерживает использование

scope в MapReduce. Если вы хотите использовать переменные на стороне клиента в

функциях MapReduce, вы можете добавить их в глобальную область, используя

необязательное поле scope с командой базы данных. Смотрите

» документацию MapReduce

для получения дополнительной информации.

Замечание:

Аргумент out

До 1.8.0 аргумент out был необязательным. Если вы его

не используете, результаты MapReduce будут записаны во временную коллекцию,

которая будет удалена при закрытии вашего соединения. В 1.8.0+ требуется аргумент

out. Смотрите

» документацию MapReduce

для получения дополнительной информации.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值