MongoDB 分组统计及条件查询

MongoDB 分组统计及条件查询

在本文中,我们将介绍如何在 MongoDB 中进行分组统计,并对数据进行条件查询。MongoDB 是一种开源的文档型数据库,具有高性能、可扩展性和灵活性的特点,常用于大规模数据的存储和处理。

阅读更多:MongoDB 教程

分组统计

在 MongoDB 中,可以使用 aggregate 方法对集合中的文档进行分组统计。aggregate 方法接受一个由不同阶段组成的数组作为参数,可以用于实现多个统计操作。

下面是一个分组统计的例子,假设我们有一个存储学生信息的集合 students,其中包含每个学生的姓名和分数信息。

db.students.aggregate([
  {
    group: {
      _id: "name",
      avgScore: { avg: "score" },
      maxScore: { max: "score" },
      count: { $sum: 1 }
    }
  }
])

上述代码中,通过 $group 阶段将学生信息按照姓名进行分组,然后使用 $avg$max$sum 操作符分别计算了每个分组的平均分数、最高分数和人数。

带条件的分组统计

除了简单的分组统计外,我们还可以根据条件进行分组统计。在 aggregate 方法中,可以使用 $match 阶段对文档进行条件查询,并将查询结果作为下一阶段的输入。

下面是一个带条件的分组统计的例子,假设我们需要对分数大于 80 的学生进行分组统计。

db.students.aggregate([
  { match: { score: {gt: 80 } } },
  {
    group: {
      _id: "name",
      avgScore: { avg: "score" },
      maxScore: { max: "score" },
      count: { $sum: 1 }
    }
  }
])

上述代码中,首先使用 $match 阶段筛选出分数大于 80 的学生,然后再进行分组统计。

示例说明

为了更好地理解分组统计及条件查询的使用方法,在下面的示例中,我们将使用一个名为 sales 的集合,其中存储了每个销售员的姓名、销售额和所属团队信息,并对其进行分组统计和条件查询。

创建示例集合

db.sales.insertMany([
  { name: "John", team: "A", amount: 100 },
  { name: "Alice", team: "B", amount: 200 },
  { name: "John", team: "B", amount: 300 },
  { name: "Bob", team: "A", amount: 150 },
  { name: "Alice", team: "A", amount: 250 },
  { name: "Bob", team: "B", amount: 200 }
])

分组统计

按团队统计销售额

db.sales.aggregate([
  {
    group: {
      _id: "team",
      totalAmount: { sum: "amount" },
      avgAmount: { avg: "amount" }
    }
  }
])

上述代码中,使用 $group 阶段按团队对销售额进行分组统计,并计算了每个团队的总销售额和平均销售额。

按姓名统计销售额

db.sales.aggregate([
  {
    group: {
      _id: "name",
      totalAmount: { sum: "amount" },
      maxAmount: { max: "amount" }
    }
  }
])

上述代码中,使用 $group 阶段按销售员姓名对销售额进行分组统计,并计算了每个销售员的总销售额和最高销售额。

带条件的分组统计

按团队统计销售额大于 200 的销售员人数

db.sales.aggregate([
  { match: { amount: {gt: 200 } } },
  {
    group: {
      _id: "team",
      count: { $sum: 1 }
    }
  }
])

上述代码中,首先使用 $match 阶段筛选出销售额大于 200 的销售员,然后再按团队进行分组统计,并计算了每个团队销售额大于 200 的销售员人数。

按姓名统计销售额大于团队平均销售额的销售员人数

db.sales.aggregate([
  {
    group: {
      _id: "name",
      totalAmount: { sum: "amount" },
      avgAmount: { avg: "amount" }
    }
  },
  { match: { totalAmount: {gt: "avgAmount" } } },
  {group: {
      _id: "_id",
      count: {sum: 1 }
    }
  }
])

上述代码中,首先使用 $group 阶段按姓名对销售额进行分组统计,并计算了每个销售员的总销售额和平均销售额,然后再使用 $match 阶段筛选出销售额大于团队平均销售额的销售员,最后再按姓名进行分组统计,并计算了满足条件的销售员人数。

总结

本文介绍了在 MongoDB 中进行分组统计及条件查询的方法。通过使用 $group 阶段对文档进行分组,以及配合使用 $match 阶段进行条件查询,可以灵活地实现各种分组统计操作。这些操作对于统计分析、业务决策等场景都非常有用,能够帮助我们更好地利用 MongoDB 的强大功能。希望本文能对读者在实际开发中的应用提供帮助和参考。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程