MongoDB 中使用 $group 进行分组统计技巧分享

阅读时长 4 分钟读完

在大数据时代,无论是前端开发还是后端开发都需要处理海量数据。而在数据处理中,数据的分组、统计是必备的基础技能之一。在 MongoDB 中,我们可以使用 $group 对数据进行分组统计。

$group 简介

$group 用于对数据集合中的文档进行分组计算,可以根据一个或多个字段进行分组,对每个组进行某些操作,如求和、求平均值、计数、求最大值或最小值等。

$group 的语法

$group 的基本语法如下:

其中,

  • _id:表示分组的依据,可以是一个常量、表达式、变量等。
  • <field1><fieldN>:表示分组后添加的新字段。
  • <accumulator1><accumulatorN>:表示用于对分组后的数据进行聚合操作的一组统计函数,可选的有 $addToSet$avg$first$last$max$min$sum 等。

$group 的示例

假设有一个文档集合,里面存储了学生的成绩信息,包括学生姓名、学科名和分数,如下所示:

我们可以使用 $group 进行分组统计,获取每个学生的总分和平均分,示例代码如下:

-- -------------------- ---- -------
---------------------
  --------
    -
      ---- --------
      ----------- ------ ----------
      --------- ------ ---------
    -
  -
--

分析代码,我们首先对 scores 集合进行聚合操作,使用 $group 对每个学生进行分组。在分组中,使用 $name 作为分组依据,表示按照学生姓名进行分组。然后,在 $group 中,使用 $sum 对分组后的分数进行求和,计算总分,并使用 $avg 对分数进行求平均值,计算平均分。最后得到的结果如下所示:

$group 的进阶应用

除了基本的分组统计之外,$group 还可以结合其他操作符实现更多高级的应用。

$project

$project 用于对真实字段进行重命名、选择、新增字段等操作。它可以在 $group 前使用,将需要的字段事先筛选出来,减少后续处理的数据量。

该示例中,我们首先使用 $project 选择了 name 和 score 两个字段,并将它们传递给管道的下一阶段 $group。这样在 $group 阶段中,MongoDB 只需保留需要的数据,显著提高聚合操作的效率。

$match

$match 可以在 $group 前使用,用于筛选符合某些条件的文档,进一步减少处理数据的数量。

-- -------------------- ---- -------
---------------------
  -------- --------- -------
  --------
    -
      ---- --------
      ----------- ------ ---------
    -
  -
--

该示例中,我们首先使用 $match 筛选出学科为数学的文档,然后再使用 $group 进行分组统计,得到每个学生在数学学科的总分。

$sort

$sort 用于对分组后的文档进行排序。

该示例中,我们首先使用 $group 进行分组统计,得到每个学生的总分。然后,使用 $sort 对总分进行降序排序,得到每个学生的排名。

总结

以上便是 $group 在 MongoDB 中的基本使用方法。通过合理地使用 $group,$project, $match 和 $sort 等操作符,我们可以针对性地筛选、聚合操作,打造高效的数据分析系统,并且使得分析结果更加准确、精细化。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65a4de9eadd4f0e0ffd383f5

纠错
反馈