MST

星途 面试题库

面试题:MongoDB聚合管道结果写入集合:复杂聚合及写入

假设有一个`products`集合,每个文档包含产品名称`productName`、类别`category`、价格`price`以及销量`salesVolume`字段。要求通过聚合管道实现以下操作:先按照类别分组,计算每个类别中价格最高的产品的销量占该类别总销量的比例,最后将结果写入一个名为`category_sales_ratio`的集合中,写出完整的聚合及写入语句。
37.4万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
db.products.aggregate([
    // 按类别分组
    {
        $group: {
            _id: "$category",
            maxPriceProduct: {
                $max: "$price"
            },
            totalSalesVolume: {
                $sum: "$salesVolume"
            },
            maxPriceProductSalesVolume: {
                $sum: {
                    $cond: [
                        { $eq: ["$price", { $max: "$price" }] },
                        "$salesVolume",
                        0
                    ]
                }
            }
        }
    },
    // 计算比例
    {
        $project: {
            category: "$_id",
            salesRatio: {
                $divide: ["$maxPriceProductSalesVolume", "$totalSalesVolume"]
            },
            _id: 0
        }
    },
    // 写入新集合
    {
        $out: "category_sales_ratio"
    }
]);