MongoDB高手课_MongoDB_NoSQL-极客时间极客时间推出的MongoDB高手课是帮助互联网从业者学习MongoDB、NoSQL的在线课程,极客时间是面向IT领域的知识服务产品,致力于帮助用户轻松学习,高效学习。https://time.geekbang.org/course/intro/253

一. MongoDB聚合框架

MongoDB聚合框架(Aggregation Framewrok)用于对集合中的数据进行一系列的运算,并将这些数据转化为所期望的形式来展示。

1. 聚合框架的作用

聚合框架 == SQL中的 GROUP BY、LEFT OUTER JOIN、AS 等

2. 聚合运算的使用场景

  • OLTP:计算
  • OLAP:统计、分析、汇总

3. 聚合运算的过程

  • 管道(Pipeline):整个聚合运算过程
  • 步骤(Stage):管道由多个步骤组成。
  • 聚合运算过程:管道接收文档(原始数据),在每个步骤中对这些文档进行一系列的运算,并将结果文档输出给下一个步骤。

4. 聚合运算的基本格式

pipeline = [$stage1, $stage2, ... $stageN];
db.<COLLECTION>.aggregate(pipline,{ options }
);

5. 常用步骤

步骤 作用 SQL等价运算符
$match 过滤 WHERE
$project 投影:选择需要的或排除不需要的字段 AS
$sort 排序 ORDER BY
$group 分组 GROUP BY
$skip 结果限制:跳过多少条记录 SKIP
$limit 结果限制:只返回多少条记录 LIMIT
$lookup 左外连接 LEFT OUTER JOIN
$unwind 展开数组
$graphLookup 图搜索
$bucket 分面搜索:把记录进行分组
$facet 分面搜索:把几个$bucket运算放在一个$facet中完成,一次性展示几种分组结果

6. 步骤中常用的运算符

步骤

$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

......

$sum/$avg
$push/$addToSet
$first/$last/$max/$min

......

7. 代码示例

注意:字段名前带$说明是集合中已有字段,字段名前不带$说明是要新增加的字段。

# $match、$skip、$limit、$project
# 从users集合中查找所有男性,跳过100个,只查出20个,只返回'名'和'姓'
db.users.aggregate([{ $match: { gender: '男' } },{ $skip: 100 },{ $limit: 20 },{ $project: {'名': '$first_name','姓': '$last_name'}}
]);# $group
# 从users集合中查找所有女性,按department分组并计算员工数量,只看小于10个人的department
# emp_qty: { $sum: 1 }  员工数量计算方法:每当看到一条数据,就$sum:1,所以看到多少员工文档就加了多少次,结果就是该部门的员工总量
# emp_qty: { $lt: 10 }  员工数量要小于10
db.users.aggregate([{ $match: { 'gender' : '女' }},{ $group: {_id: '$department'emp_qty: { $sum: 1 }    }},{ $match: { emp_qty: { $lt: 10 }}}
])# $unwind
# students集合中数据格式
#{
#  name: '张三',
#  score: [
#    { subject: '语文', score: 84 },
#    { subject: '数学', score: 90 },
#    { subject: '外语', score: 69 }
#  ]
#}
# 使用$unwind将数组score展开
db.students.aggregate([$unwind: '$score'}])
# 展开后的结果
#{ name: '张三', score: {subject: '语文', score: 84 }}
#{ name: '张三', score: {subject: '数学', score: 90 }}
#{ name: '张三', score: {subject: '外语', score: 69 }}# $bucket
# 使用$bucket把记录进行分组
# 使用$bucket按price的区间 [0,10),[10,20),[20,30),[30,40),其他 进行分组
# output: { 'count': { $sum: 1 }} 计算每个区间中有多少条记录并返回
db.products.aggregate([{$bucket: {groupBy: '$price',boundaries: [0, 10, 20, 30, 40],default: 'Other',output: { 'count': { $sum: 1 }}}
}])# ¥facet 一次性展示几种分组结果
db.products.aggregate([{$facet: {price: {$bucket: {...}},year: {$bucket: {...}}}
}])

二. MongoDB聚合查询实例

1. 计算所有订单的总销售额

# _id: null表示没有分组,将所有表作为一个大分组
# 指定一个新字段total,其内容是把所有记录的$total字段值加起来
db.orders.aggregate([{$group:{_id: null,total: { $sum: "$total"}}
}])
# 结果 { "_id" : null, "total" : NumberDecimal("44019609") }

2. 查询2019年1月1日-3月31日已完成的订单总金额和订单总数

# MongoDB中要使用ISODate将数据转化为合适的日期格式
db.orders.aggregate([// 1. 匹配条件(一般都要先做匹配){ $match: {status: "completed",orderDate: {$gte: ISODate('2019-01-01'),$lt: ISODate('2019-04-01')}}}, // 2. 聚合订单总金额、总运费、总数量{ $group: {_id: null,total: { $sum: "$total" },shippingFee: { $sum: "$shippingFee" },count: { $sum: 1 },}}, // 3. 投影时增加新字段grandTotal来计算$total与$shippingFee相加的总金额{ $project: {grandTotal: { $add: ["$total", "$shippingFee"] },count: 1,_id: 0}}
])
# 结果 { "count" : 5875, "grandTotal" : NumberDecimal("2636376.00") }

三. 使用Compass把MQL转成Node.js语句

参考文章:

《MongoDB高手课》学习记录(第五天) - SegmentFault 思否今天学习的是《09 | 实验:聚合查询》章节,主要内容是聚合部分的练习。但其实就讲了一个例子,选梳理了一下语法实现。然后演示了怎么用compass工具来可视化的生成聚合查询。https://segmentfault.com/a/1190000021378569?utm_source=sf-similar-article

MongoDB高手课学习笔记(一,再入门)_君陌先生的博客-CSDN博客_mongodb 高手课这是极客时间-MongoDB高手课的学习笔记,第一章:再入门.按照数据库排名网站db-engines.com的统计,最近几年MongoDB一直保持在前四五名,前面几位是年龄30多岁的关系型数据库(Oracle,Mysql,SQLServer,PostgreSQL).https://blog.csdn.net/weixin_42008012/article/details/108092240?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.pc_relevant_antiscanv2&spm=1001.2101.3001.4242.1&utm_relevant_index=3

MongoDB聚合查询相关推荐

  1. MongoDB聚合查询 Pipeline 和 MapReduce

    MongoDB聚合查询 MongoDB聚合查询 什么是聚合查询 Pipeline聚合管道方法 聚合流程 详细流程 聚合语法 常用聚合管道 $count $group $match $unwind $p ...

  2. mongodb聚合查询-aggregate

    Mongodb-aggregate 在工作中经常遇到一些mongodb的聚合操作,和mysql对比起来,mongo存储的可以是复杂的类型,比如数组,字典等mysql不善于处理的文档型结构,但是mong ...

  3. Mongodb使用之Aggregation聚合查询:.group()/.project()/.and().previousOperation()等api的使用

    最近在项目中遇到了Mongodb在聚合查询上的应用,在这里做一个记录. Spring Data MongoDB 中的聚合框架支持基于以下关键抽象:Aggregation.AggregationDefi ...

  4. mongodb索引生成HTML页面,mongodb高阶:索引创建、聚合查询、复制集、分片、创建备份和部署...

    先前我们讨论了mongodb的进阶查询:投影查询.分页查询以及对查询结果进行排序,从本节起我们开始学习mongodb相关的高级技术,首先我们会讨论mongodb如何创建索引,索引是数据库中最重要的东西 ...

  5. MongoDB多条件分组聚合查询

    MongoDB多条件分组聚合查询 1.样例数据 {"_id" : ObjectId("5fa13fb76c3107345a82c047"),"_cla ...

  6. Java中mongodb指定DB通过aggregate聚合查询操作示例

    目录 前言: 应用场景: 命令描述:​ 代码示例: 聚会查询: 数量查询: 前言: 大家都知道,mongodb是一个非关系型数据库,也就是说,mongodb数据库中的每张表是独立存在的,表与表之间没有 ...

  7. mongodb高级聚合查询

    在工作中会经常遇到一些mongodb的聚合操作,特此总结下.mongo存储的可以是复杂类型,比如数组.对象等mysql不善于处理的文档型结构,并且聚合的操作也比mysql复杂很多. 注:本文基于 mo ...

  8. MongoDB 入门教程实战学习笔记-31-mongo 聚合查询管道 Aggregation Pipieline

    aggregation 聚合操作处理数据记录并返回计算结果. 聚合操作将多个文档中的值组合在一起, 并且可以对分组数据执行各种操作以返回单个结果. mongodb 提供了三种执行聚合的方法: 聚合管道 ...

  9. springboot集成mongoDB高级聚合查询,关联查询

    目录 mongoDB的常用操作符 mongoDB的聚合管道符号 比较操作符 逻辑运算符? 注意注意注意? 数学运算符 mongoDB案例 ? ? ? ? 插入测试数据 ?mongodb的阶段操作符号 ...

最新文章

  1. 齐博地方门户系统v5_社区团购小程序哪个好?-小猪V5社区团购系统,社区团购系统,社区团购小程序,专注社区团购系统研发...
  2. 睡还是被睡,这是一个问题!
  3. 当前主要使用的python版本_动力火车当歌词
  4. 《JavaScript高效图形编程(修订版)》——6.7 画布绘制基础
  5. 2)Java中的==和equals
  6. cadence allegro 绘制蛇形等长线
  7. honeywell1900扫描枪的使用说明
  8. 电磁仿真原理——3. 变分法(Variationl Methods)
  9. 解决Vue 2.0在IE11版本浏览器中的兼容性问题
  10. python如何用色度表示数值大小_Python人体肤色检测
  11. Pixhawk系列飞控状态通知
  12. switch 贯穿的妙用
  13. Android改变标题栏背景颜色
  14. 科研热点|发一篇SCI吃半年土?为何国际期刊版面费越来越贵?
  15. php的常见加密方式,记录接口中常见的简单内容加密方式:恺撒加密的PHP实现
  16. Python中reshape函数参数-1的意思?
  17. 【Rosalind】Counting Point Mutations
  18. 矩阵与坐标系的映射关系
  19. 关于mt6572不能开机问题
  20. ERP(企业资源管理)概述

热门文章

  1. Unity 建立的3D物体 导成 Maya能识别的obj文件
  2. Android进阶之路 - 病毒查杀
  3. 阅读笔记-进击的学霸-理念篇-学习中心论
  4. 【语音识别】WeNet:面向工业落地的E2E语音识别工具
  5. 人工访客系统服务器地址,获取访客本地域名解析服务器的系统
  6. 如果觉得活的很累不妨进来看看(生活应该简简单单)
  7. 关注眼镜这个暴利行业
  8. 电脑术语科普:什么是“显卡交火”?
  9. 苹果手机ios设备管理软件iMazing 2.17.6官方版下载及常见问题解决
  10. Transformer网络