03-MongoDB索引和聚合
聚合 - Aggregation Pipline
类似于将SQL中的group by + order by + left join 等操作管道化。
常规使用
- 图例理解
- 准备数据
1 |
|
- 聚合操作
1 |
|
官网还有两个例子:
- Aggregation with the Zip Code Data Set (opens new window)
- Aggregation with User Preference Data (opens new window)
Pipline操作
MongoDB的聚合管道(Pipline)将MongoDB文档在一个阶段(Stage)处理完毕后将结果传递给下一个阶段(Stage)处理。阶段(Stage)操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
这里我们介绍一下聚合框架中常用的几个Stages:
$project
:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。$match
:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。$limit
:用来限制MongoDB聚合管道返回的文档数。$skip
:在聚合管道中跳过指定数量的文档,并返回余下的文档。$unwind
:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。$group
:将集合中的文档分组,可用于统计结果。$sort
:将输入文档排序后输出。$geoNear
:输出接近某一地理位置的有序文档。$bucket
: 分组(分桶)计算。$facet
: 多次分组计算。$out
: 将结果集输出,必须是Pipline最后一个Stage。
举几个例子
- $project
1 |
|
- $skip
1 |
|
- $unwind
1 |
|
- $bucket
1 |
|
- $bucket + $facet
非常常用!
1 |
|
聚合操作使用的比较频繁,在实际的工作中可以参考官方文档 - Aggregation Pipeline Stages (opens new window)。
Aggregation Options参数
举一个explain参数为例,更多的相关Options可以参考官方文档,Aggregrate相关配置 (opens new window)
- explain
1 |
|
聚合 - Map Reduce
- 图例理解
官网给了个例子
- 准备数据
1 |
|
- 计算每个顾客总花费:
map
1 |
|
reduce
1 |
|
out
1 |
|
- 计算每个订单中Items的均价
map
1 |
|
reduce
1 |
|
finalize
1 |
|
索引
索引即为提升查询等的效率,默认是对_id进行索引的。
图例理解
以对users中score进行索引时查询的效果
索引的类型
对于索引,这里简单介绍下常用的类型,其它类型和例子可以参考官网文档 - 索引 (opens new window)
- 单一索引
- 复合索引
- 多键索引
对索引的操作
- 查看集合索引
1 |
|
- 查看集合索引大小
1 |
|
- 删除集合所有索引
1 |
|
- 删除集合指定索引
1 |
|
03-MongoDB索引和聚合
https://janycode.github.io/2022/08/14/05_数据库/05_MongoDB/03-MongoDB索引和聚合/