mongodb支持array类型
在group的功能方面,mongodb确实不错。对于复杂的数据处理用mapreduce,但是这个玩意很慢,比较适合脚本处理数据,不适合实时数据查询
在实时数据处理方面得用管道,,关于管道语法方面,参看:
如果$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;}
第一个青春是上帝给的;第二个的青春是*自己努力的