MST

星途 面试题库

面试题:MongoDB聚合管道复杂查询之多条件筛选与嵌套分组

在上述'sales'集合基础上,要求查询出2023年每个月每种产品的平均销售数量,且只统计平均销售数量大于10的结果。请写出对应的聚合管道操作。
28.8万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

假设 sales 集合中的文档结构类似如下:

{
    "product": "产品名",
    "saleDate": ISODate("2023-01-01T00:00:00Z"),
    "quantity": 销售数量
}

聚合管道操作如下:

[
    {
        "$match": {
            "saleDate": {
                "$gte": ISODate("2023-01-01T00:00:00Z"),
                "$lt": ISODate("2024-01-01T00:00:00Z")
            }
        }
    },
    {
        "$group": {
            "_id": {
                "product": "$product",
                "month": {
                    "$month": "$saleDate"
                }
            },
            "averageQuantity": {
                "$avg": "$quantity"
            }
        }
    },
    {
        "$match": {
            "averageQuantity": {
                "$gt": 10
            }
        }
    },
    {
        "$project": {
            "_id": 0,
            "product": "$_id.product",
            "month": "$_id.month",
            "averageQuantity": 1
        }
    }
]

解释:

  1. $match:筛选出 2023 年的销售记录。
  2. $group:按产品和月份分组,计算每个分组的平均销售数量。
  3. $match:只保留平均销售数量大于 10 的结果。
  4. $project:重新格式化输出结果,去除 _id 字段,并将分组中的产品和月份提取为独立字段。