在 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