聚集运算之group

来源:互联网 发布:redis同步mysql 编辑:程序博客网 时间:2024/06/06 19:09

语法:

db.collection.group(document)

{

key:{key1:1,key2:1},

cond:{},

reduce: function(curr,result) {

},

initial:{},

finalize:function() {

}

}

解析:

key: 分组字段

cond:查询条件

reduce:聚合函数 (curr:分组数据的每一行的游标,result:存储每行分组的结果)

initial:初始化

finalize:统计完一组后的回调函数

计算每个栏目下的商品数 count()操作

select  count(*) from goods group by cat_id;

{

key:{cat_id:1},

cond:{},

reduce: function(curr,result) {

result.total += 1;

},

initial:{total:0}

}

计算大于50元的商品个数

{

key:{cat_id:1},

cond:{shop_price:{$gt:50}},

reduce: function(curr,result) {

result.total += 1;

},

initial:{total:0}

}


计算每个栏目下的商品库存量 (sum()操作)

select  sum(goods_number) from goods group by cat_id;

{
key:{cat_id:1},
cond:{},
reduce: function(curr,result) {
result.total += curr.goods_number;
},
initial:{total:0}
}


计算每个栏目下最贵的商品价格 (max()操作)

select  max(shop_price) from goods group by cat_id;

{
key:{cat_id:1}, 
cond:{}, 
reduce: function(curr,result) {
if(result.max<curr.shop_price) {
 result.max=curr.shop_price;
      }
},
initial:{max:0},
}


计算每个栏目下商品的平均价格
{
key:{cat_id:1},
cond:{},
reduce: function(curr,result) {
result.cnt += 1;
result.sum += curr.shop_price;
},
initial:{total:0},
finalize:function(result) {
result.avg = result.sum/result.cnt;
}
}


group缺点:
1.group需要自己手写聚合函数的业务逻辑
2.group不支持shard cluster,无法分布式运算

0 0
原创粉丝点击