MongoDB 中使用 $group 操作符进行数据分组统计的技巧探讨

阅读时长 5 分钟读完

在 MongoDB 中,我们经常需要对数据进行聚合和统计。$group 操作符可以帮助我们实现数据分组统计,并且非常灵活。在本文中,我们将探讨一些使用 $group 操作符的技巧和注意事项。

基本语法

$group 操作符的基本语法如下:

其中,_id 表示分组依据的字段或表达式,可以是任意类型。field1 表示要输出的字段名,accumulator1 表示聚合函数,expression1 表示聚合函数的输入表达式。

使用 $sum 统计数据总和

$sum 是 $group 操作符中最常用的聚合函数之一,可以用来统计数据总和。例如,我们有一个学生成绩的集合,包含姓名和分数两个字段:

现在我们想要计算所有学生的总分,可以使用以下代码:

上面的代码中,我们将 _id 设置为 null,表示不对任何字段进行分组,直接对所有数据进行统计。然后使用 $sum 统计每个文档的 score 字段,并输出总和到 total 字段。

分组计数

除了统计总和,我们还可以使用 $group 操作符统计分组数量。例如,在上面的例子中,我们可以统计学生的数目:

这里的 $sum 输入是一个常数 1,表示统计数量而不是求和。

分组排序

使用 $group 操作符可以按照指定字段进行分组排序,例如:

上面的代码按照分数进行分组,然后统计每个分数出现的次数,最后按照分数倒序排序。输出结果如下:

注意,$sort 操作符必须在 $group 操作符之后使用,否则会抛出错误。

多字段分组计数

除了单个字段分组统计,$group 还支持使用多个字段进行分组计数。例如,我们有一个员工的工资表,其中包括部门、职位和薪水三个字段:

现在我们想要按照部门和职位计算每个职位在每个部门有多少员工,可以使用以下代码:

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

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

上面的代码中,我们将 _id 设置为一个包含部门和职位的对象,表示按照这两个字段进行分组。然后使用 $sum 统计每个组的数量,并按照部门和职位进行升序排序。

总结

$group 操作符是 MongoDB 中非常强大的聚合函数之一,可以用于统计和分组计数等操作。需要注意的是,$group 操作符必须放在 $match、$project 和 $sort 等操作之后进行使用。同时,使用 $group 操作符时需要注意对 _id 字段的设置和使用各种聚合函数的输入表达式。

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

纠错
反馈