MongoDB分组查询
在MongoDB中,我们可以使用聚合操作符进行分组查询。分组查询可以帮助我们对数据进行汇总统计,生成报表,了解数据分布等。
语法
MongoDB中的分组查询使用$group
操作符,语法如下:
{
$group: {
_id: <expression>,
<field1>: { <accumulator1>: <expression1> },
...
}
}
_id
字段指定分组的依据,可以是字段名、表达式等。通常情况下,我们会根据某个字段进行分组,比如根据部门对员工进行分组统计。<field1>
字段是要生成的新字段的名称。<accumulator1>
是聚合函数,常见的有$sum
、$avg
、$min
、$max
等。<expression1>
是要进行聚合计算的表达式。
示例
假设我们有一个名为employees
的集合,每个文档包含员工的姓名、部门和薪水信息。我们现在想要按部门统计每个部门的员工数量和平均薪水。
首先,我们向employees
集合插入一些测试数据:
db.employees.insertMany([
{ name: "Alice", department: "HR", salary: 5000 },
{ name: "Bob", department: "HR", salary: 6000 },
{ name: "Charlie", department: "Engineering", salary: 7000 },
{ name: "David", department: "Engineering", salary: 8000 },
{ name: "Eve", department: "Sales", salary: 5500 },
]);
然后,我们可以使用$group
操作符进行分组查询:
db.employees.aggregate([
{
group: {
_id: "department",
count: { sum: 1 },
avgSalary: {avg: "$salary" }
}
}
]);
在上面的代码中,我们按照department
字段进行分组,使用$sum
聚合函数统计每个部门的员工数量,使用$avg
聚合函数计算平均薪水。
运行结果
运行上述代码后,我们会得到如下结果:
[
{ "_id": "HR", "count": 2, "avgSalary": 5500 },
{ "_id": "Engineering", "count": 2, "avgSalary": 7500 },
{ "_id": "Sales", "count": 1, "avgSalary": 5500 }
]
结果显示了每个部门的员工数量和平均薪水。
除了基本的统计功能,$group
操作符还支持多个聚合函数的组合,可以根据具体需求进行灵活组合。
总结
通过本文的介绍,我们学习了MongoDB中分组查询的基本语法和示例,了解了如何使用$group
操作符进行数据分组统计。分组查询在实际项目中经常用到,能够帮助我们快速了解数据分布和生成报表。