聚合操作是指:将一系列不同的操作按照一定顺序应用到数据库的文档中
单一用途的聚合方法
Map Reduce
聚合管道 db.collection.aggregate()
聚合表达式:
(1)用来操作输入文档的“公式”
(2)经过聚合表达式计算出的值可以被赋予输出文档中的字段
(3)字段路径,系统变量,文本,表达式对象,操作符
聚合阶段:
(1)聚合阶段有顺序的排列在聚合管道中
(2)绝大多数聚合阶段可以反复出现($out和$geoNear除外)
(3)数据库层面和集合层面
聚合操作符:
(1)用来构建聚合表达式
(2){<operator:[argument1],[argument2]>...}
(3){<operator:<argument>}
聚合操作:db.collection.aggregate({pipeline},{options})
{pipeline}文档定义了操作中使用的聚合管道阶段和聚合操作符
{options}文档声明了一些聚合操作的参数
聚合表达式:
(1)字段路径的表达式:
$<field>- 使用$来指示字段路径
$<field>.<sub-field>- 使用$和.来指示内嵌文档字段路径
(2)系统变量表达式:
$$<varible>-使用$来表示系统变量
$$CURRENT-指示管道中当前操作的文档
(3)常量表达式:
$listeral:<value> -指示常量value
聚合管道阶段:
$progect 可以控制文档输出的格式,用来剔除不相关的字段,以优化聚合管道操作的性能
$match 尽量在开始阶段少使用,可以减少后续阶段中需要处理的文档数量,优化聚合操作的性能
$limit 、$skip 参数为正整数
$sort 1正向排序,-1反向排序
$loopup 使用单一字段值进行查询
form:同一个数据库中的另一个查询集合
localField:管道文档中用来查询的字段
foreignField:查询集合中的查询字段
as:写入管道文档中的查询结果数组字段
$loopup 使用复杂条件值进行查询
pipeline:对查询集合中的文档使用聚合阶段进行处理
$group
_id:表明定义分组规则
<field1>:可以使用聚合操作符来定义新字段
$out 将聚合管道中的文档写入另一个集合中
options---> 操作选项:allowDiskUse:<boolean> 默认值为false
聚合操作的优化:
聚合阶段的顺序的优化:
聚合阶段合并优化: