2020-03-21 记录mongdb(9)

2020-04-07  本文已影响0人  大风车呀大风车

聚合操作是指:将一系列不同的操作按照一定顺序应用到数据库的文档中

单一用途的聚合方法

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

聚合管道阶段:

图1

$progect 可以控制文档输出的格式,用来剔除不相关的字段,以优化聚合管道操作的性能

$match 尽量在开始阶段少使用,可以减少后续阶段中需要处理的文档数量,优化聚合操作的性能

$limit 、$skip 参数为正整数

$sort  1正向排序,-1反向排序

$loopup 使用单一字段值进行查询

图2

form:同一个数据库中的另一个查询集合

localField:管道文档中用来查询的字段

foreignField:查询集合中的查询字段

as:写入管道文档中的查询结果数组字段

$loopup 使用复杂条件值进行查询

图3

pipeline:对查询集合中的文档使用聚合阶段进行处理

$group

图4

_id:表明定义分组规则

<field1>:可以使用聚合操作符来定义新字段

$out 将聚合管道中的文档写入另一个集合中

options---> 操作选项:allowDiskUse:<boolean> 默认值为false

图5

聚合操作的优化:

聚合阶段的顺序的优化:

图6 图7 图8

聚合阶段合并优化:

图9 图10 图11
上一篇 下一篇

猜你喜欢

热点阅读