当前播放: 08 | 聚合查询
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
课程目录
第一章:MongoDB再入门 (12讲)
01 | 课程介绍
免费
02 | 内容综述
免费
03 | 认识文档数据库MongoDB
免费
04 | MongoDB特色及优势
免费
05 | 实验:安装MongoDB
免费
06 | MongoDB基本操作
07 | 实验:Hello World程序开发
08 | 聚合查询
09 | 实验:聚合查询
10 | 复制集机制及原理
11 | 实验:搭建MongoDB复制集
12 | MongoDB全家桶
第二章:从熟练到精通的开发之路 (12讲)
13 | 模型设计基础
14 | JSON文档模型设计特点
15 | 文档模型设计之一:基础设计
16 | 文档模型设计之二:工况细化
17 | 文档模型设计之三:模式套用
18 | 设计模式集锦
19 | 事务开发:写操作事务
20 | 事务开发:读操作事务之一
21 | 事务开发:读操作事务之二
22 | 事务开发:多文档事务
23 | Change Stream
24 | MongoDB开发最佳实践
第三章:分片集群与高级运维之道 (16讲)
25 | 分片集群机制及原理
26 | 分片集群设计
27 | 实验:分片集群搭建及扩容
28 | MongoDB监控最佳实践
29 | MongoDB备份与恢复
30 | 备份与恢复操作
31 | MongoDB安全架构
32 | MongoDB安全加固实践
33 | MongoDB索引机制(一)
34 | MongoDB索引机制(二)
35 | MongoDB读写性能机制
36 | 性能诊断工具
37 | 高级集群设计:两地三中心
38 | 实验:搭建两地三中心集群
39 | 高级集群设计:全球多写
40 | MongoDB上线及升级
第四章:企业架构师进阶之法 (13讲)
41 | MongoDB应用场景及选型
42 | MongoDB典型案例(一)
43 | MongoDB典型案例(二)
44 | 关系型数据库迁移
45 | 数据库迁移方式及工具
46 | Oracle迁移实战
47 | MongoDB + Spark实时大数据
48 | MongoDB + Spark连接实战
49 | MongoDB SQL套接件
50 | MongoDB与微服务
51 | MongoDB与数据中台
52 | MongoDB数据中台案例
53 | 结果测试&结束语
08 | 聚合查询

08 | 聚合查询

唐建法(TJ)
Tapdata CTO、MongoDB中文社区主席、前MongoDB大中华区首席架构师
全集5109
新人首单 ¥29.9 原价 ¥129
6
登录 后留言

精选留言(19)

  • 蒋腾飞同学
    感觉python和mongodb很像,语法简洁~没有规则就是最好的规则?
    2019-11-13
    1
    3
  • daming
    请问mongo查询用explain分析查询语句,winningPlan选中的索引并非最优索引,用hint强制执行winningplan,执行是分钟以上,然后选择自己认为最有的索引执行,只需要几十秒。然而不用hint,直接执行也是几十秒,说明explain没有显示真正最优索引,请问这是什么情况?

    作者回复: queryPlanner并不能保证100%找到最优的索引,所以才在必要的时候使用hint来强制指定。当你自己选了合适的索引执行以后,这个计划就会被cache,所以下次不用hint,可能也就是用了你这个cached的(最佳)索引。

    这个是我的一个推断。你可以清除下query plan cache再重新跑一下,看看是否还是能默认用到最佳索引。

    2020-01-20
    2
  • 旺旺
    MongoDB的聚合功能真强大啊,真的是不知道。
    不过想请教老师,MongoDB的这种聚合功能,对数据量很大的时候,性能会不会很差,仍然有很好的性能表现吗?毕竟是json格式的,在聚合的时候,效率会不会很差啊
    2019-11-13
    3
    2
  • YoKate
    这个:

    db.user.aggregate([
    {
      $match:{gender: '女'}
    } , {
      $group: {
       _id:"$DEPARTMENT',
       emp_qty:{$sum:1}
    }, {
     $match: {
      emp_qty: {$lte: 10}
    }
    }])

    是不是寻找部门女员工数量少于 10 的部门?

    作者回复: 对的。 $lte: 小于等于。所以是女员工数量等于或少于10的部门

    2019-12-19
    1
  • cording
    老师,请教一下如果单表数据量有3亿,进行聚合统计比如count,效率怎么样?

    作者回复: 如果是无条件全表count,这个很快因为是实时计数的。

    带条件count取决于:1) 是否用到索引 2)你的数据是否都在内存 3)你的存储IO是否够快 - SSD vs SAS vs SATA 有很大差别

    通常来说这种操作会需要几十秒到分钟级如果没有优化。

    2019-12-17
    1
  • fedwing
    请教下老师,后续会讲到mongo的同步,异步流程吗?还有是不是可以结合CURD或者其它指令来结合下源码介绍下mongo的工作流程!直接看源码,目前有点吃力,看的时候很多也不是很了解,或者老师有没有其它的资料可以帮助理解源码的!
    感谢😊
    2019-11-14
    1
    1
  • 我扫你还是你扫我
    及时雨,Mongo聚合操作对我的网关流量统计需求的实现大有裨益。
    2019-11-13
    1
    1
  • 李家鑫
    老师我想问下使用$bucket可以根据每个范围起别名吗,还是只能根据每个_id是哪个区间开始的来判断?

    作者回复: 目前没有取别名的功能。只能按照区间值

    2020-04-29
    1
  • 追忆似水年华
    这个聚合查询涨知识了,感觉很适合用来分析各种数据
    2020-03-25
  • hellojd_gk
    打卡,跟着敲代码到此
    2020-03-21
  • 扬一场远远的风
    老师好!mongodb $in子句有长度限制吗?另外mongodb的 findMany返回的游标,会不会有内存溢出的问题呢?

    作者回复: 理论上没有,只有bson 大小限制(16MB)。但实际上我用到1000的时候查询就很慢了。

    2020-03-04
  • qbit
    请问 collection.mapReduce 与 collection.aggregate 的区别是?各自适用于哪些应用场景?

    作者回复: mapReduce已经是deprecated,基本不维护。
    Aggregation 是 替代产品,用C++写,性能比较保证。
    但是mapReduce很灵活,可以写JS脚本。
    Aggregation要按照指定的语法,有些场景可能难以实现。

    所以,如果能用agg做的,尽量用agg
    如果逻辑太复杂,就用MR

    2020-02-23
    1
  • 小氘
    管道和步骤让我想到了java中的Stream类,有中间操作和终端操作,Stream类就是想在java中实现数据库的聚合操作。
    2019-12-14
  • 丁丁历险记
    好奇一件事情,单表查询的话,为啥不直接支持下sql

    作者回复: MongoDB企业版中有支持SQL方式查询的工具。

    2019-12-11
  • 长期规划
    聚合功能很强大,可以用Pipeline实现很复杂功能,比SQL厉害
    2019-12-03
  • cliff
    老大有没有类似sumif的聚合

    作者回复: 没有sumif这个keyword,但是可以实现类似的事情,下面这个例子是只把>=10 的$a字段的值相加求和:

    db.collection.aggregate([{
      $group: {
        _id: null,
        total: {
          $sum: {
            $cond: [{ $gte: ["$a", 10] },
              "$a",
              0
            ]
          }
        }
      }
    }])

    2019-11-27
    3
  • 老师能不能再讲讲第二个例子两个match的区别?另外emp_qty的sum设为1,是说要做sum操作,还是每次增加1?如果设为2那统计出来的是人数的两倍吗?

    作者回复: 第一个match是过滤原始集合的数据。第二个是针对group之后的结果再次过滤掉员工数量大于等于10的,只保留小于10个员工的部门。 第二个match没法放到前面,因为emp_qty在原始集合里不存在,必须等group之后才可以。


    emp_qty: {$sum: 1}的意思是对group里面的每一条数据,值加1。 如果加2,自然结果就是两倍

    2019-11-27
    1
  • 为什么在project里面,first_name前要加美元符号,在一般find里面不需要加?

    作者回复: first_name要加美元符号,可以理解那是个变量, 实际的值要通过替换 first_name在文档中的具体值。

    find()操作里面的用到的first_name只是个key。

    2019-11-27
    1
  • 石头
    比sql语句复杂
    2019-11-15
收起评论
看过的人还看
MySQL实战45讲

林晓斌  网名丁奇,前阿里资深技术专家

49讲 | 56145 人已学习

新人首单 ¥29.9 原价 ¥129
数据结构与算法之美

王争  前Google工程师

80讲 | 86297 人已学习

新人首单 ¥29.9 原价 ¥129
Elasticsearch核心技术与实战

阮一鸣  eBay Pronto平台技术负责人

100讲 | 21570 人已学习

新人首单 ¥29.9 原价 ¥129
趣谈网络协议

刘超  网易研究院云计算技术部首席架构师

51讲 | 44994 人已学习

新人首单 ¥19.9 原价 ¥99