MST

星途 面试题库

面试题:MongoDB聚合框架中复杂条件表达式的运用

有一个订单集合orders,文档结构为{order_id: 'string', customer_id: 'string', order_date: 'date', order_amount: 'number', items: [ { item_name: 'string', quantity: 'number', price: 'number' } ]}。需求是通过聚合框架,计算每个客户在2023年下单的总金额,并且只返回总金额大于1000的客户及其总金额。需要处理items数组来计算每个订单的金额,再汇总客户的总金额。请编写实现该需求的聚合管道。
16.7万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
[
    // 过滤出2023年的订单
    {
        $match: {
            order_date: {
                $gte: new Date('2023-01-01'),
                $lt: new Date('2024-01-01')
            }
        }
    },
    // 展开items数组,以便处理每个商品项
    {
        $unwind: "$items"
    },
    // 计算每个订单中每个商品项的金额
    {
        $addFields: {
            item_total: {
                $multiply: ["$items.quantity", "$items.price"]
            }
        }
    },
    // 计算每个订单的总金额
    {
        $group: {
            _id: "$order_id",
            customer_id: { $first: "$customer_id" },
            order_amount: { $sum: "$item_total" }
        }
    },
    // 按customer_id分组,汇总每个客户的总金额
    {
        $group: {
            _id: "$customer_id",
            total_amount: { $sum: "$order_amount" }
        }
    },
    // 过滤出总金额大于1000的客户
    {
        $match: {
            total_amount: { $gt: 1000 }
        }
    },
    // 重命名字段
    {
        $project: {
            customer_id: "$_id",
            total_amount: 1,
            _id: 0
        }
    }
]