首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php f3框架使用带有mapper的聚合框架管道

php f3框架使用带有mapper的聚合框架管道
EN

Stack Overflow用户
提问于 2017-05-16 05:36:29
回答 1查看 77关注 0票数 0

我希望在事务表中使用mapper的聚合框架管道,结果应该如下所示:假设我在一个集合中有7000个status 1,2,3,4 (1=pending, 2=confirmed, 3=decline, 4=claimed)事务

数据表示:

代码语言:javascript
复制
Pending Count | Confirmed Count | Decline Count | Claimed Count
 4000                 2000            1000          0
  1. 问题是,我不确定应该使用哪个字段作为组中的密钥。
  2. 我的代码正在返回所有符合标准的记录。

请看一下我的代码:

代码语言:javascript
复制
$filters = array('dateCreated'=>array(
                            '$gte'=>'2015-01-01', 
                            '$lte'=>'2017-05-15'
                    ));

 $group = [
              'keys' =>['userId'=>1],
              'initial' => ['pendingCount'=>0, 'confirmedCount'=>0, 'declineCount'=>0, 'claimedCount'=>0],
              'reduce'=>'
                      function(obj, result){

                        switch(result.status){
                            case 1:
                                result.pendingCount++;
                                break;

                            case 2:
                                result.confirmedCount++;
                                break;                          

                            case 3:
                                result.declineCount++;
                                break;
                            case 4:
                                result.claimedCount++;
                                break;

                        }
                      }
                        ',
              'finalize'=>'function(result){}'
        ];

 $data =  $this->mapper->find($filter, ['group'=>$group]);
 echo "data<pre>";
 print_r($data);

输出:

在这里,您可以看到它返回我的多个文档,但我只想为所有事务创建一条记录,可能userId键应该被替换为‘null’。

数组( =>数组( _id => MongoId Object ( $id => 591a8f5bb06b243d0262d0a1 )) userId => pendingCount =>0 confirmedCount =>0 declineCount => 0 claimedCount =>0)1 =>数组( _id => MongoId对象( $id => 591a8b5bb06b243d0262d0a2)) userId userId$id en26 20 en22 en23 en25#)2数组(_id => MongoId对象( $id => 591a8f5b06b243d262d0a3) userId => 38730976 pendingCount =>0 confirmedCount => 0 declineCount => 0 claimedCount =>0)3 =>数组(en21 20#591f5b06b243d0262d0a4)en22#64920 pendingCount =>0 confirmedCount => 0 declineCount => 0 claimedCount =>0) ……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-16 05:57:49

您将按userId进行分组,这样每个userId就可以得到一行。只需传递一个空的keys数组来根据所有记录聚合数据。另外,在还原函数中有一个错误:它应该是obj.status

代码语言:javascript
复制
$group = [
  'keys' =>[],
  'initial' => ['pendingCount'=>0, 'confirmedCount'=>0, 'declineCount'=>0],
  'reduce'=>'
    function(obj, result){
      switch(obj.status){
        // etc.
      }
    }
  ',
  'finalize'=>'function(result){}'
];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43993255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档