如何在MongoDB聚合查询中计算产品最高转化率?
MongoDB聚合查询计算产品最高转化率
聚合查询实现代码
db.your_collection_name.aggregate([ // 过滤仅保留View和Purchase事件 { $match: { "Event type": { $in: ["View", "Purchase"] } } }, // 按产品分组,统计浏览量和购买量 { $group: { _id: "$Product", viewCount: { $sum: { $cond: [{ $eq: ["$Event type", "View"] }, 1, 0] } }, purchaseCount: { $sum: { $cond: [{ $eq: ["$Event type", "Purchase"] }, 1, 0] } } } }, // 计算转化率,处理浏览量为0的异常情况 { $project: { product: "$_id", viewCount: 1, purchaseCount: 1, conversionRate: { $cond: [ { $eq: ["$viewCount", 0] }, 0, { $multiply: [{ $divide: ["$purchaseCount", "$viewCount"] }, 100] } ] }, _id: 0 } }, // 按转化率降序排序 { $sort: { conversionRate: -1 } }, // 可选:仅获取转化率最高的一个产品 { $limit: 1 } ])
各阶段说明
- $match阶段:筛选出仅包含
View和Purchase类型的事件,减少后续计算的数据量。 - $group阶段:以
Product为分组依据,通过$cond条件判断,分别统计每个产品的浏览量和购买量。 - $project阶段:重新整理输出字段,按规则计算转化率(购买量/浏览量×100),同时通过条件判断避免浏览量为0时出现除以0的错误。
- $sort阶段:按转化率从高到低排序,直观呈现产品转化率排名。
- $limit阶段:可选配置,若只需要最高转化率的产品,添加此阶段返回第一条结果即可。
示例数据运行结果
针对你提供的样本数据,运行查询后会得到:
{ "viewCount" : 2, "purchaseCount" : 1, "product" : "water_heater", "conversionRate" : 50 }
即water_heater的转化率为50%,高于television的约33.33%,是转化率最高的产品。
内容的提问来源于stack exchange,提问作者Lee Yi Tien
相关产品推荐
相关产品推荐

