如何在MongoDB中使用聚合管道?

在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.