各位用户为了找寻关于PHP中的mongodb group操作实例的资料费劲了很多周折。这里教程网为您整理了关于PHP中的mongodb group操作实例的相关资料,仅供查阅,以下为您介绍关于PHP中的mongodb group操作实例的详细内容

紧接着上篇来,这篇主要讲,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 操作有很多,在这里,只是说了一些常用的功能。