標籤:
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; }
關於mongodb的 數組分組 array group