关于mongodb的 数组分组 array group

mongodb支持array类型

在group的功能方面,mongodb确实不错。对于复杂的数据处理用mapreduce,但是这个玩意很慢,比较适合脚本处理数据,不适合实时数据查询

在实时数据处理方面得用管道,关于管道语法方面,参看:

http://blog.csdn.net/terry_water/article/details/43529367

如果$class_artist是数组,需要对数组里面的数据进行group,那么可以使用$unwind

,它的功能就是把数组拆分出来,形成多条数据。

db.articles.aggregate([
  {$match: { class_date: { $gte: date } } },
  {$project: { _id: 0, class_artist: 1 } },
  {$unwind: "$class_artist" },
  {$group: { _id: "$class_artist", tags: { $sum: 1 } }},
  {$project: { _id: 0,class_artist: "$_id", tags: 1 } },
  {$sort: { tags: -1 } }
])

在yii2框架中:

可以在Query.php中加入一个函数:

对 $filter_size数组拆分,然后group。

public function filterSize($db = null){
		
		$collection = $this->getCollection($db);
        $pipelines = [];
        if ($this->where !== null) {
            $pipelines[] = ['?match' => $collection->buildCondition($this->where)];
        }
		
		$pipelines[] = ['?unwind'=>"\$filter_size"];
		
		
        $pipelines[] = [
            '$group' => [
                '_id' => "\$filter_size",
                'num_total' => [
                    '?sum'=> 1,
                ],
            ]
        ];
	$pipelines[] = ['?sort'=> ['_id'=> 1] ];
		
        $result = $collection->aggregate($pipelines);
		return $result;
       
	
	}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值