数据库-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: ...
随机推荐
- Elasticsearch架构原理
架构原理 本书作为 Elastic Stack 指南,关注于 Elasticsearch 在日志和数据分析场景的应用,并不打算对底层的 Lucene 原理或者 Java 编程做详细的介绍,但是 Ela ...
- Linux常用命令last的使用方法详解
http://www.jb51.net/article/120140.htm 最近在学习linux命令,学习到了last命令,发现很多同学对last命令不是很熟悉,last命令的功能列出目前与过去登入 ...
- BA--干球温度、露点温度和湿球温度--概念
1. 干球温度.露点温度和湿球温度 dry bulb temperature, dew temperature, and wet-bulb temperature 摘要:未饱和湿空气中水蒸汽处于过热状 ...
- BA-冷源系统--一次流量控制方案(转载)
空调水变一次流量控制方案 浙大网新快威科技 黄逸林 一.引言 建筑物中央空调系统的冷冻水一次泵,传统上都采用固定转速水泵.空调水的变一次流量控制系统(VPF:Variable-Primary-Flow ...
- Android面试过程描写叙述
1.之前所写项目的介绍 2.android一些常见问题的问答 3.关于android平时非常少用到但实则非常重要的问题描写叙述 技术分析 1自我感觉面试中比較好的方面: 1.熟悉掌握之前所写项目 2. ...
- swift菜鸟入门视频教程-09-类和结构体
本人自己录制的swift菜鸟入门,欢迎大家拍砖,有什么问题能够在这里留言. 主要内容: 类和结构体对照 结构体和枚举是值类型 类是引用类型 类和结构体的选择 集合(collection)类型的赋值与复 ...
- iOS开发一行代码系列:一行搞定输入框
近期总结了下开发过程中经常使用的功能,发现有时候我在做反复性的劳动.于是决定把经常使用的功能抽出来,方便下次使用. 我的想法是:用最少的代码来解决这个问题.于是写了一些经常使用的工具类,名字就叫一行代 ...
- codecombat之KithGard地牢19-37关代码分享
codecombat中国游戏网址:http://www.codecombat.cn/ 全部代码为javascript代码分享 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 19 ...
- RecyclerView实现底部载入很多其它功能
这两天在公司没有什么任务分配,就研究了下咱们Google在Android5.0 推出的一个用来取代ListView的列表控件----RecyclerView. 发现功能上确实比ListView强大了不 ...
- isual Studio 2013编译ImageMagick---转
“该文引用自 CruiseYoung的:Visual Studio 2013编译ImageMagick http://blog.csdn.net/fksec/article/details/36008 ...