面试题答案
一键面试- 实现思路:
- 筛选阶段:使用
$match
操作符,根据价格大于阈值以及评论数量与销量比值大于某个比例筛选出符合条件的文档。 - 分组阶段:使用
$group
操作符,按产品类别进行分组,计算每个类别下产品的平均价格、总销量以及平均评论数量。 - 排序阶段:使用
$sort
操作符,按照平均价格从高到低排序。 - 限制阶段:使用
$limit
操作符,仅返回前10条数据。 - 性能优化:
- 在筛选条件的字段(如
price
、salesVolume
、reviewCount
)上创建复合索引,这样在$match
阶段可以利用索引快速定位符合条件的文档,减少扫描的数据量。
- 在筛选条件的字段(如
- 筛选阶段:使用
- 聚合管道表达式:
[
{
$match: {
price: { $gt: <价格阈值> },
$expr: {
$gt: [ { $divide: [ "$reviewCount", "$salesVolume" ] }, <评论数量与销量比值> ]
}
}
},
{
$group: {
_id: "$productCategory",
averagePrice: { $avg: "$price" },
totalSalesVolume: { $sum: "$salesVolume" },
averageReviewCount: { $avg: "$reviewCount" }
}
},
{
$sort: {
averagePrice: -1
}
},
{
$limit: 10
}
]
在上述表达式中,<价格阈值>
和<评论数量与销量比值>
需要根据实际需求替换为具体数值。同时,productCategory
是假设文档中产品类别的字段名,实际需根据集合结构调整。