面试题答案
一键面试假设 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
}
}
]
解释:
$match
:筛选出 2023 年的销售记录。$group
:按产品和月份分组,计算每个分组的平均销售数量。$match
:只保留平均销售数量大于 10 的结果。$project
:重新格式化输出结果,去除_id
字段,并将分组中的产品和月份提取为独立字段。