如何在MongoDB中按两个字段执行group by分组并统计用户数量
问题根因
你现有查询的错误出在$group阶段的分组键设置:你仅将rxm_number作为唯一分组键,没有把shelf_number也加入分组维度,因此聚合结果只会按rxm_number聚合,无法得到两个字段组合分组的统计结果。
修改后的查询
根据是否需要对同组内重复的username去重,可选择以下两种实现:
- 需统计去重后的用户数(同组内同一个
username多次出现只算1次)
db.reportfinals.aggregate([ { $group: { // 同时指定两个字段作为组合分组键 _id: { rxm_number: "$rxm_number", shelf_number: "$shelf_number" }, user_list: { $addToSet: "$username" } } }, { $project: { _id: 0, rxm_number: "$_id.rxm_number", shelf_number: "$_id.shelf_number", users: { $size: "$user_list" } } } ])
- 无需去重(同组内每条文档对应计数+1,性能更优)
db.reportfinals.aggregate([ { $group: { _id: { rxm_number: "$rxm_number", shelf_number: "$shelf_number" }, users: { $sum: 1 } } }, { $project: { _id: 0, rxm_number: "$_id.rxm_number", shelf_number: "$_id.shelf_number", users: 1 } } ])
内容的提问来源于stack exchange,提问作者AhmCho
相关产品推荐
相关产品推荐

