MongoDB学习3:聚合查询
1. 什么是MongoDB聚合框架
1.1 MongoDB聚合框架(Aggregation Frameworn)是一个计算框架,它可以:
● 作用在一个或几个集合上
● 对集合中的数据进行一系列运算
● 将这些数据转化为期望的形式
1.2 从效果而言,聚合框架相当于SQL查询中的:
● group by
● left outer join
● as 等
1.3 整个聚合运算过程称为管道(Pipeline),它是由多个步骤(Stage)组成的,每个管道:
● 接受一些列文档(原始数据)
● 每个步骤对这些文档进行一系列运算
● 结果文档输出给下一个步骤
2. 使用聚合框架
2.1 聚合运算的基本格式
pipeline = [$stage1,$stage2,...$stageN]
db.<集合>.aggregate(
pipeline,
{options}
)
2.2 常见步骤
| 步骤 | 作用 | SQL等价运算符 |
|---|---|---|
| $match | 过滤 | where |
| $project | 投影 | as |
| $sort | 排序 | order by |
| $group | 分组 | group by |
| $skip / $limit | 结果限制 | skip / limit |
| $lookup | 左外连接 | left outer join |
| $unwind | 展开数组 | N/A |
| $graphLookup | 图搜索 | N/A |
| $facet/$bucket | 分面搜索 | N/A |
2.2 常见步骤中的运算符
| $match | $project | $group |
|---|---|---|
|
● $eq、$gt、$gte、$lt、$lte ● $and、$or、$not、$in ● $geoWithin、$intersect ...... |
● 选择需要的或排除不需要的字段 ● $map、$reduce、$filter ● $range ● $multiply、$divide、$substract、$add ● $year、$month、$dayOfMonth、$hour、$minute、$second ...... |
● $esum、$avg ● $push、$addToSet ● $first、$last、$max、$min ...... |
3. 聚合运算的使用场景
3.1 聚合查询可用于OLAP和ALTP场景,例如:
| OLTP | OLAP |
|---|---|
|
● 计算 |
● 分析一段时间内的销售总额、均值 ● 计算一段时间内的净利润 ● 分析购买人的年龄分布 ● 分析学生成绩分布 ● 统计员工绩效 |
3.1 MQL常用步骤与SQL对比
| SQL | MQL |
|---|---|
|
|
|
|
| MQL特有 $unwind |
|
| MQL特有 $bucket |
|
| MQL特有 $facet |
|
MongoDB学习3:聚合查询的更多相关文章
- MongoDB学习笔记——聚合操作之MapReduce
MapReduce MongoDB中的MapReduce相当于关系数据库中的group by.使用MapReduce要实现两个函数Map和Reduce函数.Map函数调用emit(key,value) ...
- python操作mongodb之二聚合查询
#聚合查询 from pymongo import MongoClient db = MongoClient('mongodb://10.0.0.9:27017/').aggregation_exam ...
- MongoDB学习day06--高级查询aggregate聚合管道和nodejs操作aggregate
一.MongoDB聚合管道(Aggregation Pilpeline) 使用聚合管道可以对集合中的文档进行变换和组合. 主要功能:表的关联查询.数据统计 二.aggregate 管道操作符与表达式 ...
- MongoDB学习笔记——聚合操作之聚合管道(Aggregation Pipeline)
MongoDB聚合管道 使用聚合管道可以对集合中的文档进行变换和组合. 管道是由一个个功能节点组成的,这些节点用管道操作符来进行表示.聚合管道以一个集合中的所有文档作为开始,然后这些文档从一个操作节点 ...
- MongoDB学习笔记——聚合操作之group,distinct,count
单独的聚合命令(group,distinct,count) 单独聚合命令 比aggregate性能低,比Map-reduce灵活度低:但是可以节省几行javascript代码,后面那句话我自己加的,哈 ...
- MongoDB学习笔记六—查询下
查询内嵌文档 数据准备 > db.blog.find().pretty() { "_id" : ObjectId("585694e4c5b0525a48a441b5 ...
- MongoDB学习笔记五—查询上
数据准备 { , "goods_name" : "KD876", "createTime" : ISODate("2016-12- ...
- MongoDB学习 (六):查询
本文地址:http://www.cnblogs.com/egger/archive/2013/06/14/3135847.html 欢迎转载 ,请保留此链接๑•́ ₃•̀๑! 本文将介绍操作符的使用 ...
- [转载]MongoDB学习 (六):查询
本文地址:http://www.cnblogs.com/egger/archive/2013/06/14/3135847.html 欢迎转载 ,请保留此链接๑•́ ₃•̀๑! 本文将介绍操作符的使用 ...
- mongodb学习(二)分级查询数组中的值
(PS: 标题有点不妥当...) 大概是这样...数据结构如下: 需要模糊查询title的值... mongodb中操作语句: 主要是注意这里urlElements不需要加[0]...我开始的时候写成 ...
随机推荐
- Vue使用定时器定时刷新页面
1. 需求说明 在前端开发中,往往会遇到页面需要实时刷新数据的情况,给用户最新的数据展示. 2. 逻辑分析 如果需要数据实时更新,我们自然是需要使用定时器,不断的调用接口数据,会相对的消耗内存. 3. ...
- CDQ分治 & 整体分治
Part 1:CDQ分治 CDQ分治讲解博客 可以把CDQ分治理解为类似与归并排序求逆序对个数的一种分治算法(至少我现在是这么想的).先处理完左右两边各自对答案的贡献,在处理跨越左右两边的对答案的贡献 ...
- 关于IDEA的一些快捷键操作
shift+F6修改实体类中的属性会重构代码
- web自动化 -- HTMLreport(一)测试报告自定义测试用例名,重写ddt
一.需求痛点 1.HTMLreport测试报告的用例名不明确 2.希望可以自定义HTMLreport测试报告的用例名 3.痛点截图 二.解决办法 1.原因分析 HTMLreport测试报告中的用例名是 ...
- Flask框架(一):介绍与环境搭建
1.Flask介绍 Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架. Flask 本身相当于一个内核, ...
- Git 提交、删除、切换命令
1.将本地代码提交到远程仓库 [初始将文件修改上传到远程仓库] 初始化: git init 添加到暂存区: git add . 提交到仓库: git commit -m 'first commit' ...
- 什么是Hexo博客
Hexo 是一个基于nodejs 的静态博客网站生成器,作者是来自台湾的Tommy Chen. 特点: 不可思议的快速 ─ 只要一眨眼静态文件即生成完成 支持 Markdown 仅需一道指令即可部署到 ...
- 【前端】H5,底边按钮吸边,但是覆盖了列表循环的内容
我的说情况大致类似于: PS:因为底边那个模块 绝对是浮动的,所有会遮住列表最下面一条现实的一部分, 解决:这个时候把body的底边的内边距调整到可显示的就可以了: body { background ...
- Django学习路31_使用 locals 简化 context 写法,点击班级显示该班学生信息
urls 中 进行注册 url(r'grades',views.grades) views 中编写函数 def grades(request): grades_list = Grade.objects ...
- Django学习路22_empty为空,forloop.counter 从1计数,.counter0 从0计数 .revcounter最后末尾数字是1,.revcounter0 倒序,末尾为 0
当查找的数据不存在,返回为 空时 在 html 中使用 {%empty%} 语句 进行显示 def getstudents(request): students = Student.objects.a ...