天天看点

MongoDB 聚合查询

什么是 MongoDB 聚合框架

MongoDB 聚合框架(Aggregation Framework)是一个计算框架,它可以:

作用在一个或几个集合上;

对集合中的数据进行的一系列运算;

将这些数据转化为期望的形式;

从效果而言,聚合框架相当于 SQL 查询中的:

GROUP BY

LEFT OUTER JOIN

AS等

管道(Pipeline)和步骤(Stage)

整个聚合运算过程称为管道(Pipeline),它是由多个步骤(Stage)组成的,每个管道:

接受一系列文档(原始数据);

每个步骤对这些文档进行一系列运算;

结果文档输出给下一个步骤;

MongoDB 聚合查询

聚合运算的基本格式

常见步骤

步骤

作用

SQL等价运算符

$match

过滤

WHERE

$project

投影

AS

$sort

排序

ORDER BY

$group

分组

<code>$skip/$limit</code>

结果限制

SKIP/LIMIT

$lookup

左外连接

常见步骤中的运算符

<code>$eq/$gt/$gte/$lt/$lte</code>

选择需要的或排除不需要的字段

<code>$sum/$avg</code>

<code>$and/$or/$not/$in</code>

<code>$map/$reduce/$filter</code>

<code>$push/$addToSet</code>

<code>$geoWithin/$intersect</code>

<code>$range</code>

<code>$first/$last/$max/$min</code>

<code>$multiply/$divide/$substract/$add</code>

<code>$year/$month/$dayOfMonth/$hour/$minute/$second</code>

$unwind

展开数组

N/A

$graphLookup

图搜索

聚合运算的使用场景

聚合查询可以用于OLAP和OLTP场景。例如:

OLTP

OLAP

计算

分析一段时间内的销售总额、均值

计算一段时间内的净利润

分析购买人的年龄分布

分析学生成绩分布

统计员工绩效

MQL 常用步骤与 SQL 对比

MQL 特有步骤 $unwind

<code>$unwind</code>指定字段进行子文档展开,其他字段不动

MQL 特有步骤 $bucket

<code>$bucket</code>指定字段按指定区间进行分组统计

MongoDB 聚合查询

MQL 特有步骤 $facet

<code>$facet</code>指定多个字段分别<code>$bucket</code>分组统计

MongoDB 聚合查询