面试题答案
一键面试-
聚合框架中阶段的顺序及作用:
- $match阶段:筛选出符合条件的数据。这里用于过滤掉销售金额小于等于1000的记录,减少后续处理的数据量。
- $group阶段:按照产品名称和销售日期的月份进行分组,计算每个组内(即每个月每种产品)的总销售金额。
- $project阶段(可选):用于选择需要显示的字段,只展示产品名称、月份和总销售金额,使结果更简洁。
-
对应的聚合代码(以MongoDB为例):
db.sales.aggregate([
// $match阶段
{
$match: {
salesAmount: { $gt: 1000 }
}
},
// $group阶段
{
$group: {
_id: {
productName: "$productName",
month: { $month: "$salesDate" }
},
totalSalesAmount: { $sum: "$salesAmount" }
}
},
// $project阶段
{
$project: {
productName: "$_id.productName",
month: "$_id.month",
totalSalesAmount: 1,
_id: 0
}
}
]);
假设集合名为 sales
,文档结构中产品名称字段为 productName
,销售日期字段为 salesDate
,销售金额字段为 salesAmount
。如果是其他数据库,实现方式会有所不同,但基本思路类似。