MST
星途 面试题库

面试题:MongoDB聚合框架中常用表达式及应用

在MongoDB聚合框架中,$match、$group、$project这几个常用表达式的作用分别是什么?请举例说明如何使用$group和$sum表达式来统计集合中每个类别下文档的某个数值字段总和。
44.9万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
  1. $match表达式的作用
    • 作用:用于过滤集合中的文档,只保留符合指定条件的文档进入下一个聚合阶段。它类似于SQL中的WHERE子句。
    • 示例:假设有一个products集合,包含namepricecategory字段,要筛选出价格大于50的产品文档。
    db.products.aggregate([
        {
            $match: {
                price: { $gt: 50 }
            }
        }
    ]);
    
  2. $group表达式的作用
    • 作用:用于根据指定的字段对文档进行分组,并对每个组应用累加器(如$sum$avg等)操作。它类似于SQL中的GROUP BY子句。
    • 示例:统计products集合中每个类别下产品的数量。
    db.products.aggregate([
        {
            $group: {
                _id: "$category",
                count: { $sum: 1 }
            }
        }
    ]);
    
  3. $project表达式的作用
    • 作用:用于修改输出文档的结构,选择要包含或排除的字段,还可以创建新的计算字段。它类似于SQL中的SELECT子句。
    • 示例:在products集合中,只输出产品的nameprice字段。
    db.products.aggregate([
        {
            $project: {
                name: 1,
                price: 1,
                _id: 0
            }
        }
    ]);
    
  4. 使用$group和$sum表达式统计集合中每个类别下文档的某个数值字段总和
    • 假设products集合结构如下:
    [
        { "name": "Product1", "price": 20, "category": "Electronics" },
        { "name": "Product2", "price": 30, "category": "Clothing" },
        { "name": "Product3", "price": 40, "category": "Electronics" }
    ]
    
    • 统计每个类别下产品的价格总和:
    db.products.aggregate([
        {
            $group: {
                _id: "$category",
                totalPrice: { $sum: "$price" }
            }
        }
    ]);
    
    • 上述聚合操作会根据category字段对文档进行分组,然后使用$sum累加器计算每个类别下price字段的总和,并将结果以totalPrice字段输出。结果类似如下:
    [
        { "_id": "Electronics", "totalPrice": 60 },
        { "_id": "Clothing", "totalPrice": 30 }
    ]