MongoDB分组统计
在MongoDB中,分组统计是一个非常有用的功能,可以根据某些条件将文档分组,并计算每个分组的统计数据。通过使用聚合管道操作符 $group
,我们可以轻松实现这一功能。
基本语法
$group
操作符通常与 MongoDB 的聚合管道一起使用,将文档按指定字段进行分组,并可以进行各种统计操作,如计数、求和、平均等。
基本语法如下:
{
group: {
_id: <expression>, // 根据哪个字段进行分组
field1: {sum: <expression> }, // 对field1字段进行求和操作
field2: { avg: <expression> }, // 对field2字段进行平均值操作
field3: {max: <expression> }, // 对field3字段进行最大值操作
...
}
}
示例代码1
假设我们有一个名为 sales
的集合,其中包含了商品销售数据,字段包括商品名称、销售数量和销售金额。我们想要按商品名称进行分组,计算每种商品的销售数量和销售金额总和。
db.sales.aggregate([
{
group: {
_id: "product",
totalQuantity: { sum: "quantity" }, // 总销售数量
totalAmount: { sum: "amount" } // 总销售金额
}
}
])
运行结果:
{ "_id" : "apple", "totalQuantity" : 100, "totalAmount" : 500 }
{ "_id" : "banana", "totalQuantity" : 50, "totalAmount" : 200 }
{ "_id" : "orange", "totalQuantity" : 80, "totalAmount" : 400 }
示例代码2
除了对数字类型字段进行统计,我们还可以对字符串类型字段进行操作。例如,我们想要统计每个城市的客户数量。
db.customers.aggregate([
{
group: {
_id: "city",
totalCustomers: { $sum: 1 } // 客户数量
}
}
])
运行结果:
{ "_id" : "New York", "totalCustomers" : 30 }
{ "_id" : "Los Angeles", "totalCustomers" : 25 }
{ "_id" : "Chicago", "totalCustomers" : 20 }
{ "_id" : "Houston", "totalCustomers" : 15 }
示例代码3
在分组统计过程中,我们还可以对结果进行排序、筛选或添加额外的计算字段。例如,我们想要按总销售金额对商品进行排序。
db.sales.aggregate([
{
group: {
_id: "product",
totalAmount: { sum: "amount" }
}
},
{
$sort: { totalAmount: -1 } // 按 totalAmount 字段降序排序
}
])
运行结果:
{ "_id" : "apple", "totalAmount" : 500 }
{ "_id" : "orange", "totalAmount" : 400 }
{ "_id" : "banana", "totalAmount" : 200 }
总结
通过以上示例代码,我们可以看到 MongoDB 分组统计的基本用法和语法。使用 $group
操作符,我们可以方便地对文档进行分组并进行各种统计操作。在实际应用中,分组统计功能可以帮助我们更好地分析数据、获取洞察并做出更科学的决策。