MST

星途 面试题库

面试题:MongoDB聚合框架中阶段的顺序影响

假设你有一个包含销售记录的集合,记录包含产品名称、销售日期、销售数量和销售金额等字段。现在要统计每个月每种产品的总销售金额,并且只显示销售金额大于1000的结果。请描述实现这个需求时聚合框架中阶段的顺序以及每个阶段的作用,同时写出对应的聚合代码。
40.8万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
  1. 聚合框架中阶段的顺序及作用

    • $match阶段:筛选出符合条件的数据。这里用于过滤掉销售金额小于等于1000的记录,减少后续处理的数据量。
    • $group阶段:按照产品名称和销售日期的月份进行分组,计算每个组内(即每个月每种产品)的总销售金额。
    • $project阶段(可选):用于选择需要显示的字段,只展示产品名称、月份和总销售金额,使结果更简洁。
  2. 对应的聚合代码(以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。如果是其他数据库,实现方式会有所不同,但基本思路类似。