使用 MongoDB 进行聚合操作

churippu_s.png

在MongoDB中,为了进行聚合计算,提供了一个称为Aggregation的机制。哎呀!真方便。

举个例子,假设在WebShops集合(≒表)中记录了每个Web店铺按日统计的访问量,现在我们来获取最近一周的访问排名。

以下是使用PHP的示例代码。

// MongoDBへ接続
$mongo = new Mongo();
// MyDBデータベース
$db = $mongo->selectDB('mydb');
// WebShopsコレクション(≒テーブル)
$collShops = $db->selectCollection("webshops");
// ここ一週間でのWebアクセスが多い順に店舗を取得
$docs = $collShops->aggregate(
    array(
        // $match は WHERE句に相当
        array(
            '$match' => array(
                'chiiki_id' => $chiiki_id,
                'date' => array('$gt' => date('Ymd', strtotime("-7 days")))
            )
        ),
        // $group は GROUP BY句に相当
        array(
            '$group' => array(
                '_id' => '$shopid',
                'count' => array('$sum' => '$access')
            )
        ),
        // $sort は ORDER BY句に相当
        array(
            '$sort' => array(
                'count' => -1
            )
        ),
        // $limit は LIMIT句に相当
        array(
            '$limit' => 10
        )
    )
);
// 店舗格納用配列
$ShopList = array();
// 取得成功なら配列に格納していく
if($docs['ok'] == 1) {
    foreach ($docs['result'] as $id => $obj) {
        $ShopList[] = $obj;
    }
}
// 表示
print_r($ShopList);

请在参考链接中深入了解更详细的信息。

churippu_s.png

▼第10回 使用MongoDB进行聚合处理|畅享MongoDB数据库的轻松体验

▼mongoDBの集計にはMapReduceよりaggregateが簡単で楽な件
http://chobi.hatenablog.jp/entry/2013/06/16/201152

▼进行MongoDB聚合处理 (3) (聚合框架)
http://blog.zdrv.com/archives/457

▼SQL 到 Aggregation 的映射图表
请参考文档:http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/

这就是以上的内容。

广告
将在 10 秒后关闭
bannerAds