PHP中的mongodb group操作实例

所属分类: 数据库 / MongoDB 阅读数: 92
收藏 0 赞 0 分享

紧接着上篇来,这篇主要讲,mongodb的group功能,做的还是挺强大的,相当对于find(),skip(),distinct()等,用法比较复杂。

测试数据:

复制代码 代码如下:

> db.fruit.find(); 
{ "_id" : 1, "category" : "fruit", "name" : "apple" } 
{ "_id" : 2, "category" : "fruit", "name" : "peach" } 
{ "_id" : 3, "category" : "fruit", "name" : "banana" } 
{ "_id" : 4, "category" : "veggie", "name" : "corn" } 
{ "_id" : 5, "category" : "veggie", "name" : "broccoli" } 

1、根据category分组

复制代码 代码如下:

> db.fruit.group( 
       { 
         key: { category: 1}, 
         reduce: function(obj, prev) { 
                     prev.items.push(obj.name); 
                 }, 
         initial: { items : [] } 
       } 
    ); 

        { 
                "category" : "fruit", 
                "items" : [ 
                        "apple", 
                        "peach", 
                        "banana" 
                ] 
        }, 
        { 
                "category" : "veggie", 
                "items" : [ 
                        "corn", 
                        "broccoli" 
                ] 
        } 
]

php代码如下:

复制代码 代码如下:

$keys = array("category" => 1); 
$initial = array("items" => array()); 
$reduce = "function (obj, prev) { prev.items.push(obj.name); }"; 
$g = $collection->group($keys, $initial, $reduce); 
 
print_r($g);   //结果如下。 
 
Array 

    [retval] => Array 
        ( 
            [0] => Array 
                ( 
                    [category] => fruit 
                    [items] => Array 
                        ( 
                            [0] => apple 
                            [1] => peach 
                            [2] => banana 
                        ) 
 
                ) 
 
            [1] => Array 
                ( 
                    [category] => veggie 
                    [items] => Array 
                        ( 
                            [0] => corn 
                            [1] => broccoli 
                        ) 
 
                ) 
 
        ) 
 
    [count] => 5 
    [keys] => 2 
    [ok] => 1 
)

2、根据category来分组,并统计count

复制代码 代码如下:

> db.fruit.group( 
           { 
             key: { category: 1}, 
             cond: { _id: { $gt: 2 } }, 
             reduce: function(obj, prev) { 
                prev.items.push(obj.name); 
                prev.count++; 
             }, 
             initial: { items : [] ,count:0} 
           } 
        ); 

    { 
        "category" : "fruit", 
        "items" : [ 
            "banana" 
        ], 
        "count" : 1 
    }, 
    { 
        "category" : "veggie", 
        "items" : [ 
            "corn", 
            "broccoli" 
        ], 
        "count" : 2 
    } 
]

php代码如下:

复制代码 代码如下:

$keys = array("category" => 1); 
$initial = array("items" => array(),'count'=>0); 
$reduce = "function (obj, prev) { " . 
              "prev.items.push(obj.name); " . 
              "prev.count++;" . 
          "}"; 
$condition = array('condition' => array("_id" => array( '$gt' => 2))); 
$g = $collection->group($keys, $initial, $reduce, $condition); 
 
print_r($g);   //结果如下。 
 
Array 

    [retval] => Array 
        ( 
            [0] => Array 
                ( 
                    [category] => fruit 
                    [items] => Array 
                        ( 
                            [0] => banana 
                        ) 
 
                    [count] => 1 
                ) 
 
            [1] => Array 
                ( 
                    [category] => veggie 
                    [items] => Array 
                        ( 
                            [0] => corn 
                            [1] => broccoli 
                        ) 
 
                    [count] => 2 
                ) 
        ) 
 
    [count] => 3 
    [keys] => 2 
    [ok] => 1 

3、利用aggregate group功能,也挺强大

复制代码 代码如下:

> db.fruit.aggregate([ 
                     { $match: { _id: {$gt:0} } }, 
                     { $group: { _id: "$category", count: { $sum: 1 } } }, 
                     { $sort: { count: -1 } } 
                   ]); 
{ "_id" : "fruit", "count" : 3 } 
{ "_id" : "veggie", "count" : 2 } 

php代码如下:

复制代码 代码如下:

$cond = array( 
    array( 
        '$match' => array('_id' => array('$gt' => 0)), 
    ), 
    array( 
        '$group' => array( 
            '_id' => '$category', 
           'count' => array('$sum' => 1), 
        ), 
    ), 
    array( 
        '$sort' => array("count" => -1), 
    ), 
); 
$result = $collection->aggregate($cond); 
print_r($result);    //结果如下: 
 
Array 

    [result] => Array 
        ( 
            [0] => Array 
                ( 
                    [_id] => fruit 
                    [count] => 3 
                ) 
 
            [1] => Array 
                ( 
                    [_id] => veggie 
                    [count] => 2 
                ) 
 
        ) 
 
    [ok] => 1 

mongodb 的select 操作有很多,在这里,只是说了一些常用的功能。

更多精彩内容其他人还在看

mongodb的安装使用和pymongo基本使用教程

这篇文章主要介绍了mongodb的安装使用和pymongo基本使用教程,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Ubuntu16.04手动安装MongoDB的详细教程

本篇文章主要介绍了Ubuntu16.04手动安装MongoDB的详细教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

MongoDB安全及身份认证(实例讲解)

下面小编就为大家带来一篇MongoDB安全及身份认证(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

基于MongoDB数据库索引构建情况全面分析

下面小编就为大家带来一篇基于MongoDB数据库索引构建情况全面分析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

mongodb 3.2.5安装详细过程

这篇文章主要介绍了mongodb 3.2.5安装过程详细记录,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

Mongodb 启动命令mongod参数说明(中文翻译)

这篇文章主要介绍了Mongodb 启动命令mongod参数说明(中文翻译)的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

MongoDB 导出导入备份恢复数据详解及实例

这篇文章主要介绍了MongoDB 导出导入备份恢复数据详解及实例的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

mongodb 随机获取一条记录的方法

这篇文章主要介绍了 mongodb 随机获取一条记录的方法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

CentOS 6.4创建Mongodb副本集

这篇文章主要为大家详细介绍了CentOS 6.4创建Mongodb副本集的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

mongodb 集群重构和释放磁盘空间实例详解

这篇文章主要介绍了mongodb 集群重构和释放磁盘空间实例详解的相关资料,具有一定的参考价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多