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]...我开始的时候写成 ...
随机推荐
- StringBuilder和 String的区别?
String在进行运算时(如赋值.拼接等)会产生一个新的实例,而 StringBuilder则不会.所以在大 量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 S ...
- ReentrantLock以及AQS实现原理
什么是可重入锁? ReentrantLock是可重入锁,什么是可重入锁呢?可重入锁就是当前持有该锁的线程能够多次获取该锁,无需等待.可重入锁是如何实现的呢?这要从ReentrantLock的一个内部类 ...
- 【Unity3D】简单常用的功能实现2——视角的跟随、旋转、缩放
[视角的跟随.旋转.缩放实现] 首先,在实现这些功能之前,我们给Hierarchy面板中的主摄像机额外包装几层Empty Object,形成一个新的摄像机结构,如下图(当然这些空物体的命名大家按自己方 ...
- Nginx配置中文参数说明
#定义Nginx运行的用户和用户组 user www www; # #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; # #全局错误日志定义类型,[ debu ...
- 痞子衡嵌入式:16MB以上NOR Flash使用不当可能会造成软复位后i.MXRT无法正常启动
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT上使用16MB以上NOR Flash软复位无法正常启动问题的分析解决经验. 痞子衡这几天在支持一个i.MXRT1050客户项 ...
- 读懂操作系统之快表(TLB)原理(七)
前言 前不久.我们详细分析了TLB基本原理,本节我们通过一个简单的示例再次叙述TLB的算法和原理,希望借此示例能加深我们对TLB(又称之为快表,深入理解计算机系统(第三版)又称之为翻译后备缓冲区)的理 ...
- python学习之路------你想要的都在这里了
python学习之路------你想要的都在这里了 (根据自己的学习进度后期不断更新哟!!!) 一.python基础 1.python基础--python基本知识.七大数据类型等 2.python基础 ...
- 【高并发】亿级流量场景下如何为HTTP接口限流?看完我懂了!!
写在前面 在互联网应用中,高并发系统会面临一个重大的挑战,那就是大量流高并发访问,比如:天猫的双十一.京东618.秒杀.抢购促销等,这些都是典型的大流量高并发场景.关于秒杀,小伙伴们可以参见我的另一篇 ...
- PHP array_diff_assoc() 函数
实例 比较两个数组的键名和键值,并返回差集: <?php$a1=array("a"=>"red","b"=>"g ...
- Python File tell() 方法
概述 tell() 方法返回文件的当前位置,即文件指针当前位置.高佣联盟 www.cgewang.com 语法 tell() 方法语法如下: fileObject.tell() 参数 无 返回值 返回 ...