数据库-mongodb-聚合与map reduce
分组统计:group()
Group函数:
1.不支持集群、分片,无法分布式计算
2.需要手写聚合函数的业务逻辑
|
1
2
3
4
5
6
7
8
|
db.goods.group({key:{cat_id:1},cond:{},reduce:function(curr,result){ result.cnt +=1;},initial:{cnt:0}}); |
查找每个栏目下商品价格大于50的商品数量
|
1
2
3
4
5
6
7
8
|
db.goods.group({key:{cat_id:1},cond:{shop_price:{$gt:50}},initial:{cnt:0},reduce:function(curr,result){ result.cnt +=1;}}); |
每个栏目下的商品库存量sum操作
|
1
2
3
4
5
6
7
8
|
db.goods.group({key:{cat_id:1},cond:{},initial:{cnt:0},reduce:function(curr,result){ result.num += curr.goods_number;}}); |
计算每个栏目下最贵的商品,实现max()函数
|
1
2
3
4
5
6
7
8
9
10
|
db.goods.group({key:{cat_id:1},cond:{},initial:{max:0},reduce:function(curr,result){ if(curr.shop_price > result.max ){ result.max = curr.shop_price; }}}); |
计算每个栏目下商品 的平均价格cu
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
db.goods.group({key:{cat_id:1},cond:{},initial:{cnt:0,sum:0},reduce:function(curr,result){ if(curr.shop_price > result.max ){ result.cnt += 1; result.sum += curr.shop_price; }}, finalize:function(result){ result.avg = result.sum / result.avg;}}); |
aggregate()函数
| where | $match |
| group by | $group |
| having | $match |
| select | $project |
| order by | $sort |
| limit | $limit |
| sum() | $sum |
| count() | $sum |
查询每个栏目下的商品数量
|
1
2
3
|
db.collection.aggreagte([{$group:{_id:"$cat_id",total:{$sum:1}}}]); |
查询goods下有多少商品
|
1
2
3
|
db.collection.aggreagte([{$group:{_id:null,total:{$sum:1}}}]); |
查询每个栏目下价格大于50的商品,并筛选出“满足条件的商品数量大于等于3”的栏目
match在group前是SQL中match的作用,match在group后是having的作用
|
1
2
3
4
5
|
db.collection.aggreagte([{$match:{shop_price:{$gt:50}}},{$group:{_id:null,total:{$sum:1}}},{$match:{total:{$gte:3}}},]); |
查询每个栏目下的库存量,并按照库存量排序
|
1
2
3
4
|
db.collection.aggreagte([{$group:{_id:"$cat_id",total:{$sum:"$goods_number"}}},
]); |
查询每个栏目的商品平均价格,并按照平均价格由高到低排序
--这个group有不少参数,官方文档里面有
|
1
2
3
4
|
db.collection.aggreagte([{$group:{_id:"$cat_id",avg:{$avg:"$shop_price"}}}, //$符号是转为列的意思{$sort:{avg:1}}}]); |
MapReduce
mapReduce随着大数据的概念而流行
其实mapReduce的概念非常简单
从功能上来说,相当于RDMS的group操作
它的真正强项在于分布式,当数据非常大时,分布在各个地方时,group就力不能及了,mapReduce用蛮力来计算,mapReduce工作过程
map-->映射,先把同一个组的数据,映射到一个数组上
reduce-->规约,把数组进行运算
简单用法
|
1
2
3
4
5
|
var map = function(){ emit(this.cat_id,this.shop_price);}var reduce = function(cat_id,all_price){XX各种数据操作};db.goods.mapReduce(map,reduce,{quer:{},out:'res'}); //把查询到的结果输出为res表 |
mongodb对js的引擎做了一些修改对array数组增加了一些函数
mapReduce一般写在mongos上
数据库-mongodb-聚合与map reduce的更多相关文章
- 数据库——MongoDB——>Java篇
MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产 ...
- 非关系型数据库----MongoDB
一.什么是MongoDB? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提 ...
- python数据库-MongoDB的安装(53)
一.NoSQL介绍 1.什么是NoSQL NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL". NoSQL,指的是非关系型的数据库.NoSQL有时也称 ...
- MongoDB Map Reduce(转载)
MongoDB Map Reduce Map-Reduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE). MongoDB提供的Map ...
- 记一次MongoDB Map&Reduce入门操作
需求说明 用Map&Reduce计算几个班级中,每个班级10岁和20岁之间学生的数量: 需求分析 学生表的字段: db.students.insert({classid:1, age:14, ...
- mongodb Map/reduce测试代码
private void AccountInfo() { ls.Clear(); DateTime dt = DateTime.Now.Date; IMongoQuery query = Query& ...
- Mongodb学习笔记四(Mongodb聚合函数)
第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...
- MongoDB 聚合 (转) 仅限于C++开发
MongoDB除了基本的查询功能,还提供了很多强大的聚合工具,其中简单的可计算集合中的文档个数, 复杂的可利用MapReduce做复杂数据分析. 1.count count返回集合中的文档数量 db. ...
- Mongodb聚合函数
插入 测试数据 for(var j=1;j<3;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, Age: ...
随机推荐
- nyoj 42判断欧拉路径模板题
#include<stdio.h> #include<string.h> #define N 2100 int degree[N]; int pre[N];//很长时间没写欧拉 ...
- 多线程程序调用fork的现象
- VMWare虚拟机下为Ubuntu 12.04.1网络设置(NAT方式)
NAT方式: 虚拟机能够上外网,能够訪问宿主计算机所在网络的其它计算机(反之不行). 第一步:设置虚拟机vmware网络參数 (1)打开虚拟机,选择菜单"编辑">" ...
- 解决Unity的 The file 'MemoryStream' is corrupted! Remove it and launch 崩溃问题
孙广东 2015.7.30 问题: 在项目平时删除资源或者脚本资源时产生的prefab的脚本引用丢失,特别是在场景scene中丢了解决方式/// 1.又一次Clone项目/// 2.删除项目的 ...
- Java Secret: Using an enum to build a State machine(Java秘术:用枚举构建一个状态机)
近期在读Hadoop#Yarn部分的源代码.读到状态机那一部分的时候,感到enmu的使用方法实在是太灵活了,在给并发编程网翻译一篇文章的时候,正好碰到一篇这种文章.就赶紧翻译下来,涨涨姿势. 原文链接 ...
- 去哪网实习总结:JavaWeb中文传參乱码问题的解决(JavaWeb)
本来是以做数据挖掘的目的进去哪网的.结构却成了系统开发... 只是还是比較认真的做了三个月.老师非常认同我的工作态度和成果... 实习立即就要结束了,总结一下几点之前没有注意过的变成习惯和问题,分享给 ...
- Java集合(二):List列表
在上一节中,介绍了Java集合的总体情况.从这节開始,将介绍详细的类.这里不单单介绍类的使用方法.还会试图从源代码的角度分析类的实现.这一节将介绍List接口及实现类.即列表中的链表LinkedLis ...
- 用 C 语言编写一个简单的垃圾回收器
人们似乎觉得编写垃圾回收机制是非常难的,是一种仅仅有少数智者和Hans Boehm(et al)才干理解的高深魔法.我觉得编写垃圾回收最难的地方就是内存分配,这和阅读K&R所写的malloc例 ...
- unity坐标转换问题
unity最经常使用的几种坐标.屏幕坐标.世界坐标.ngui坐标,相对于父物体的坐标(localPoisition). 可是有时候这几种坐标相互转换何其困难,让自己狠抓头. 不得不操作的方式是创建虚拟 ...
- USACO 1.4 Mother's Milk
Mother's Milk Farmer John has three milking buckets of capacity A, B, and C liters. Each of the numb ...