在 MongoDB 中,可以使用聚合管道中的 $group 阶段实现分组和统计查询。
$group 的基本语法为:
{ $group: {
<key>: <expression>,
<accumulator1>: { <accumulator1_operator>: <expression1> },
...
} }
- 表示分组的字段
- 表示累加器,用于统计值计算
- 表示累加器操作符,如 $sum, $avg 等
- 表示用于计算的表达式
示例:
- 根据 category 字段分组,计算每个分类的总价格:
db.products.aggregate([
{
$group: {
_id: "$category", // group by category
total: { $sum: "$price" } // sum up prices
}
}
])
输出:
{ "_id" : "Food", "total" : 100 }
{ "_id" : "Drink", "total" : 210 }
- 根据 year 字段分组,计算每个年份的订单数量:
db.orders.aggregate([
{
$group: {
_id: "$year", // group by year
count: { $sum: 1 } // sum 1 for each document
}
}
])
输出:
{ "_id" : 2020, "count" : 50 }
{ "_id" : 2021, "count" : 60 }
- 根据 category 和 year 两字段分组,计算每个分类每个年份的销售总额:
db.products.aggregate([
{
$group: {
_id: { category: "$category", year: "$year" },
total: { $sum: "$price" }
}
}
])
输出:
{ "_id" : { "category" : "Food", "year" : 2020 }, "total" : 500 }
{ "_id" : { "category" : "Drink", "year" : 2020 }, "total" : 350 }
{ "_id" : { "category" : "Food", "year" : 2021 }, "total" : 600 }
{ "_id" : { "category" : "Drink", "year" : 2021 }, "total" : 400 }
所以,$group 阶段通过分组和累加器,可以让我们在 MongoDB 中实现各种强大的统计和分析查询。