📜  MongoDB-聚合(1)

📅  最后修改于: 2023-12-03 15:03:02.093000             🧑  作者: Mango

MongoDB 聚合

在 MongoDB 中,聚合是指对数据集进行计算和组合以生成结果(类似于 SQL 中的 GROUP BY 语句)。聚合框架是 MongoDB 查询语言的一部分,它允许用户使用内置运算符对文档进行分组,过滤和投影操作。

聚合管道

最常用的聚合工具是聚合管道(aggregation pipeline),它是一种将多个聚合步骤串联在一起形成的管道,每个步骤都将产生一个文档集合作为输出,供下一步骤使用。MongoDB 支持以下聚合操作符:

  • $match:过滤文档,类似于 find 方法。
  • $group:将文档按照某个字段进行分组,然后对每组进行计算。
  • $project:与 find 方法中的投影参数相同,用于选择要返回的字段。
  • $sort:对文档进行排序。
  • $limit:限制输出的文档数目。
  • $skip:跳过指定数目的文档。

以下是一个示例聚合管道:

// 对 orders 集合进行聚合
db.orders.aggregate([
  // 过滤出 status 为 "complete" 的文档
  { $match: { status: "complete" } },
  // 按照 owner 字段进行分组
  { $group: { _id: "$owner", total: { $sum: "$amount" } } },
  // 进行投影操作,只保留 owner 和 total 字段
  { $project: { _id: 0, owner: "$_id", total: 1 } },
  // 对 total 字段进行排序
  { $sort: { total: -1 } },
  // 限制输出的文档数目为 10
  { $limit: 10 }
])
聚合函数

MongoDB 还提供了一些聚合函数,用于对文档进行计算。聚合函数分为以下几类:

  • 累加器函数(accumulator functions):如 $sum,用于对一组文档中的某个字段进行求和计算。
  • 数学函数(mathematical functions):如 $sqrt,用于对数值字段进行数学运算。
  • 字符串函数(string functions):如 $substr,用于对字符串字段进行操作。
  • 日期函数(date functions):如 $year,用于对日期字段进行操作。

以下是一些常见的聚合函数示例:

  • 统计 orders 集合中的文档数:

    db.orders.count()
    
  • 计算 orders 集合中 amount 字段的平均值:

    db.orders.aggregate([
      { $group: { _id: null, avgAmount: { $avg: "$amount" } } }
    ])
    
  • 对 orders 集合中的 amount 字段进行求和计算:

    db.orders.aggregate([
      { $group: { _id: null, totalAmount: { $sum: "$amount" } } }
    ])
    
  • 统计 orders 集合中 status 字段的不同值:

    db.orders.aggregate([
      { $group: { _id: "$status", count: { $sum: 1 } } }
    ])
    
总结

MongoDB 的聚合工具可以帮助我们轻松地对文档进行聚合操作,支持多种聚合操作符和聚合函数。在实际应用中,可以根据具体业务场景选择合适的聚合方式,以提升数据分析和查询效率。