mongo中的聚合管道
# 什么是聚合管道
在MongoDB中,聚合管道(Aggregation Pipeline)是一种功能强大的数据处理工具,它允许您根据一系列的阶段(stage)对数据进行处理和转换。聚合管道可以用于执行复杂的数据聚合、分组、筛选、排序和转换操作。
聚合管道由多个阶段组成,每个阶段都会接收输入数据,并将其输出传递到下一个阶段。这些阶段可以按照需要进行排序和组合,以完成所需的数据处理任务。
# 使用
# 语法结构
db.collection.aggregate([
// 阶段 1
{ <操作符>: <表达式> },
// 阶段 2
{ <操作符>: <表达式> },
// ...
// 阶段 N
{ <操作符>: <表达式> }
])
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
每个阶段处理完后,会将数据传递给下一个阶段。
# 常见的操作符
下面是常用的操作符和表达式,用于构建聚合管道:
$match
:用于筛选满足指定条件的文档。表达式可以使用各种比较运算符、逻辑运算符和正则表达式等。
{ $match: { <条件表达式> } }
1
$group
:根据指定的字段对文档进行分组,并计算每个分组的聚合结果。可以使用聚合运算符和系统变量对文档进行计算。
{ $group: { _id: <分组字段>, <聚合字段>: { <聚合运算符>: <表达式> } } }
1
$project
:指定输出文档中包含的字段,以及对字段进行重命名、计算和组合等操作。
{ $project: { <字段1>: <表达式>, <字段2>: <表达式>, ... } }
1
$sort
:根据指定字段对文档进行排序。
{ $sort: { <字段>: <排序方式> } }
1
$skip
:跳过指定数量的文档。
{ $skip: <数量> }
1
$limit
:限制输出文档的数量。
{ $limit: <数量> }
1
$unwind
:将包含数组的字段拆分为多个文档。
{ $unwind: <字段> }
1
$lookup
:在不同的集合之间执行类似于关联操作的查找。
{ $lookup: { from: <目标集合>, localField: <本地字段>, foreignField: <外部字段>, as: <结果别名> } }
1
以上是一些常用的聚合管道操作符和表达式,您可以根据具体的需求在聚合管道中组合使用它们。请注意,聚合管道可以包含任意数量的阶段,并且阶段的顺序非常重要,因为每个阶段的输出将作为下一个阶段的
# $group详细讲解
推荐参考:https://blog.csdn.net/qq_18948359/article/details/88777066 (opens new window)
语法
{
$group: {
_id: <分组字段>,
<聚合字段>: { <聚合运算符>: <表达式> },
...
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7
_id:表示你要进行聚合的字段,如果你要对整张表进行聚合,则可以填写为null。
对于:<聚合字段>: { <聚合运算符>: <表达式> }
聚合字段,对外显示的字段
聚合运算符,例如sum,min这些
表达式,聚合的具体字段
例如:
db.orders.aggregate([
{
$group: {
_id: "$customer",
totalAmount: { $sum: "$totalAmount" }
}
}
])
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
如果想要看整张表的sum。即将整个表看做一个分组,就可以这样:
db.orders.aggregate([
{
$group: {
_id: null,
totalAmount: { $sum: "$totalAmount" }
}
}
])
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
编辑 (opens new window)
上次更新: 2024/02/22, 14:03:19