MongoDB 高手课
唐建法(TJ)
Tapdata CTO、MongoDB 中文社区主席、前 MongoDB 大中华区首席架构师
19351 人已学习
新⼈⾸单¥59
课程目录
已完结/共 53 讲
MongoDB 高手课
登录|注册
留言
25
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 08 | 聚合查询
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 认识文档数据库MongoDB
04 | MongoDB特色及优势
05 | 实验:安装MongoDB
06 | MongoDB基本操作
07 | 实验:Hello World程序开发
08 | 聚合查询
09 | 实验:聚合查询
10 | 复制集机制及原理
11 | 实验:搭建MongoDB复制集
12 | MongoDB全家桶
13 | 模型设计基础
14 | JSON文档模型设计特点
15 | 文档模型设计之一:基础设计
16 | 文档模型设计之二:工况细化
17 | 文档模型设计之三:模式套用
18 | 设计模式集锦
19 | 事务开发:写操作事务
20 | 事务开发:读操作事务之一
21 | 事务开发:读操作事务之二
22 | 事务开发:多文档事务
23 | Change Stream
24 | MongoDB开发最佳实践
25 | 分片集群机制及原理
26 | 分片集群设计
27 | 实验:分片集群搭建及扩容
28 | MongoDB监控最佳实践
29 | MongoDB备份与恢复
30 | 备份与恢复操作
31 | MongoDB安全架构
32 | MongoDB安全加固实践
33 | MongoDB索引机制(一)
34 | MongoDB索引机制(二)
35 | MongoDB读写性能机制
36 | 性能诊断工具
37 | 高级集群设计:两地三中心
38 | 实验:搭建两地三中心集群
39 | 高级集群设计:全球多写
40 | MongoDB上线及升级
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 | 结果测试&结束语
登录 后留言

全部留言(25)

  • 最新
  • 精选
李英权
复杂的聚合查询 一定要尽可能把所有的match放在在project投影之前,如果match出现在project之后 就无法享受索引加速了。 当然 还需要根据match字段 创建对应的联合索引。 我刚刚把一个复杂查询优化了 就是把几个match提前了 然后建索引,查询耗时从5秒降到1秒

作者回复: 谢谢分享!

2020-09-03
2
13
daming
请问mongo查询用explain分析查询语句,winningPlan选中的索引并非最优索引,用hint强制执行winningplan,执行是分钟以上,然后选择自己认为最有的索引执行,只需要几十秒。然而不用hint,直接执行也是几十秒,说明explain没有显示真正最优索引,请问这是什么情况?

作者回复: queryPlanner并不能保证100%找到最优的索引,所以才在必要的时候使用hint来强制指定。当你自己选了合适的索引执行以后,这个计划就会被cache,所以下次不用hint,可能也就是用了你这个cached的(最佳)索引。 这个是我的一个推断。你可以清除下query plan cache再重新跑一下,看看是否还是能默认用到最佳索引。

2020-01-20
2
3
cording
老师,请教一下如果单表数据量有3亿,进行聚合统计比如count,效率怎么样?

作者回复: 如果是无条件全表count,这个很快因为是实时计数的。 带条件count取决于:1) 是否用到索引 2)你的数据是否都在内存 3)你的存储IO是否够快 - SSD vs SAS vs SATA 有很大差别 通常来说这种操作会需要几十秒到分钟级如果没有优化。

2019-12-17
3
Jack
lookup做join查询,两个集合的文档都大于10万条时,几乎就查不出来了,怎么优化呢?

作者回复: 用于lookup 的字段,特别是 foreignField 在被lookup 表里面,必须要有索引。多半是因为这个

2020-08-16
3
2
丁丁历险记
好奇一件事情,单表查询的话,为啥不直接支持下sql

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

2019-12-11
2
扬一场远远的风
老师好!mongodb $in子句有长度限制吗?另外mongodb的 findMany返回的游标,会不会有内存溢出的问题呢?

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

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

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

2020-02-23
2
1
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
李家鑫
老师我想问下使用$bucket可以根据每个范围起别名吗,还是只能根据每个_id是哪个区间开始的来判断?

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

2020-04-29
2
cliff
老大有没有类似sumif的聚合

作者回复: 没有sumif这个keyword,但是可以实现类似的事情,下面这个例子是只把>=10 的$a字段的值相加求和: db.collection.aggregate([{ $group: { _id: null, total: { $sum: { $cond: [{ $gte: ["$a", 10] }, "$a", 0 ] } } } }])

2019-11-27
4
收起评论