PHP中的mongodb group操作实例
PHP中的mongodb group操作实例
发布时间:2016-12-28 来源:查字典编辑
摘要:紧接着上篇来,这篇主要讲,mongodb的group功能,做的还是挺强大的,相当对于find(),skip(),distinct()等,用法...

紧接着上篇来,这篇主要讲,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学习
热门MongoDB学习
编程开发子分类