您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
mongodb-聚集运算之group
发布时间:2017-11-22 19:07:59编辑:雪饮阅读()
聚集运算之group的语法
db.collection.group(document)
document:
key:分组字段
cond:查询条件
reduce:聚合函数,已经进入每个组进行遍历组的数据记录时的操作
initial:进入每个组前执行的操作
finalize:统计一组后离开组后的回调函数
按照栏目id进行分组统计每组商品的数量
mongodb查询
curr:每组中记录单元,result则是每组的整组
查询示例
按照栏目id查询分组统计每组商品总数
mongodb查询语法
db.goods.group({
key:{cat_id:1},
cond:{},
reduce:function(curr,result){
result.cnt+=1;
},
initial:{cnt:0}
})
mysql查询
select cat_id,count(*) from ecs_goods group by cat_id;
统计商品价格大于50的商品,按照栏目id分组统计
mysql查询
select cat_id,count(*) from ecs_goods where shop_price>50
group by cat_id;
mongodb查询
db.goods.group({
key:{cat_id:1},
cond:{shop_price:{$gt:50}},
reduce:function(curr,result){
result.cnt+=1;
},
initial:{cnt:0}
})
按栏目id分组统计每个栏目下商品的库存量
mysql查询
select cat_id,sum(goods_number) from ecs_goods group by cat_id;
mongodb查询
db.goods.group({
key:{cat_id:1},
cond:{},
reduce:function(curr,result){
result.num += curr.goods_number;
},
initial:{num:0}
})
按栏目id分组统计每个栏目下商品的最大价格
mongodb查询
db.goods.group({
key:{cat_id:1},
cond:{},
reduce:function(curr,result){
if(curr.shop_price>result.max){
result.max=curr.shop_price;
}
},
initial:{max:0}
})
mysql查询
select cat_id,max(shop_price) from ecs_goods group by cat_id;
按照栏目id分组,统计每组商品的平均价格
mongodb查询
db.goods.group({
key:{cat_id:1},
cond:{},
reduce:function(curr,result){
result.cnt += 1;
result.sum += curr.shop_price;
},
initial:{sum:0,cnt:0},
finalize:function(result){
result.avg=result.sum/result.cnt;
}
})
mysql查询
select cat_id,avg(shop_price) from ecs_goods group by cat_id;
group不支持集群和分片,即group不支持分布式计算
要想支持分布式运算需要用到框架
分布式可以用aggregate()其在2.2版本中已经支持,或者mapReduce()其在2.4版本中已经支持
关键字词:mongodb,聚集运算,group
下一篇:mongodb-用户管理