• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP中的mongodb group操作实例

php 搞代码 4年前 (2022-01-04) 38次浏览 已收录 0个评论

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

测试数据:

><strong style="color:transparent">来源gaodaima#com搞(代@码网</strong> 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 操作有很多,在这里,只是说了一些常用的功能。

更多PHP中的mongodb group操作实例相关文章请关注搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP中的mongodb group操作实例

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址