面试题答案
一键面试假设使用的是MongoDB,以下是实现该需求的聚合管道代码:
db.sales.aggregate([
// 按region和product分组,计算每个分组的总销售额
{
$group: {
_id: { region: "$region", product: "$product" },
totalSales: { $sum: { $multiply: ["$quantity", "$price"] } }
}
},
// 按region分组,找出每个地区总销售额最高的产品及其销售额
{
$sort: {
_id.region: 1,
totalSales: -1
}
},
{
$group: {
_id: "$_id.region",
topProduct: { $first: "$_id.product" },
topSales: { $first: "$totalSales" }
}
}
]);
上述聚合操作步骤如下:
- 第一个
$group
阶段,按region
和product
分组,通过$multiply
操作符计算quantity
和price
的乘积,然后用$sum
累加得到每个分组的总销售额。 $sort
阶段,先按region
升序排序,再按总销售额totalSales
降序排序。- 第二个
$group
阶段,按region
再次分组,使用$first
操作符取出每个地区销售额最高的产品及其销售额。