MST

星途 面试题库

面试题:MongoDB中$group操作符结合复杂表达式实现多条件分组与计算

在一个销售数据集合`sales`中,每个文档包含`product`(产品名称)、`quantity`(销售数量)、`price`(单价)和`region`(销售地区)字段。使用`$group`操作符在聚合管道里按`region`和`product`分组,计算每个地区每种产品的总销售额(`quantity * price`),并且找出每个地区总销售额最高的产品及其销售额。
41.8万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

假设使用的是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" }
        }
    }
]);

上述聚合操作步骤如下:

  1. 第一个$group阶段,按regionproduct分组,通过$multiply操作符计算quantityprice的乘积,然后用$sum累加得到每个分组的总销售额。
  2. $sort阶段,先按region升序排序,再按总销售额totalSales降序排序。
  3. 第二个$group阶段,按region再次分组,使用$first操作符取出每个地区销售额最高的产品及其销售额。