在MongoDB中使用聚合管道主要有以下几个步骤:
1、 使用aggregate()方法调用聚合管道。
- 在MongoDB驱动中传入一个聚合管道数组即可调用聚合管道。
python
pipeline = [
{"$match": {"status": "A"}},
{"$group": {"_id": "$cust_id", "total": {"$sum": "$amount"}}}
]
result = collection.aggregate(pipeline)
2、 使用$match进行数据过滤。
- 这 equivalent 于 find()查询,用于过滤掉不需要的文档。
{ $match: { status: "A" } }
3、 使用$group进行分组统计。
- 根据指定的 _id 字段值进行分组,然后计算指定的聚合统计值。
{ $group: { _id: "$cust_id", total: { $sum: "$amount" } } }
4、 使用$sort对数据进行排序。
- 这相当于SQL的ORDER BY,用于数据排序。
{ $sort: { age: -1 } }
5、 使用$limit和$skip进行分页。
- 这相当于SQL的LIMIT和OFFSET,用于数据分页。
{ $limit: 10 }
{ $skip: 5 }
6、 使用$lookup进行左外连接实现JOIN功能。
- 这相当于SQL的LEFT JOIN,用于在pipeline内实现关系数据JOIN查询。
{
$lookup: {
from: "inventory",
localField: "item",
foreignField: "sku",
as: "inventory_docs"
}
}
7、 使用各种字段计算表达式($addFields,$set,等)添加计算字段。
- 用于在聚合过程中添加各种计算结果或衍生字段。
8、 使用$facet进行分组和嵌套聚合。
- 这可以高效地进行多个聚合查询,并将结果打包为一个文档输出。
9、 等等其他类型 – $project, $unwind, $replaceRoot, $avg, $max, $min, $sum, $size, etc.