求助:MongoDB多字段范围分组聚合查询,统计指定组价格总和
MongoDB多字段范围分组统计价格总和
示例文档
[ { Age: 10, BPM: 20, Price: 6 }, { Age: 12, BPM: 30, Price: 9 }, { Age: 15, BPM: 40, Price: 6 }, { Age: 10, BPM: 46, Price: 7 }, { Age: 20, BPM: 60, Price: 8 } ]
聚合查询方案
使用MongoDB聚合框架,通过$switch判断文档所属的自定义分组,再按分组统计价格总和:
db.collection.aggregate([ // 为每个文档标记所属分组 { $addFields: { groupKey: { $switch: { branches: [ // 分组1:年龄10-15 且 BPM20-50 { case: { $and: [ { $gte: ["$Age", 10] }, { $lte: ["$Age", 15] }, { $gte: ["$BPM", 20] }, { $lte: ["$BPM", 50] } ] }, then: "Age 10-15 & BPM 20-50" }, // 分组2:年龄15-20 且 BPM40-90 { case: { $and: [ { $gte: ["$Age", 15] }, { $lte: ["$Age", 20] }, { $gte: ["$BPM", 40] }, { $lte: ["$BPM", 90] } ] }, then: "Age 15-20 & BPM 40-90" } ], // 不属于指定分组的文档归到"Other"组 default: "Other" } } } }, // 按分组统计价格总和 { $group: { _id: "$groupKey", totalPrice: { $sum: "$Price" } } } ])
查询结果
针对示例文档执行上述查询,会得到以下结果:
[ { "_id": "Age 10-15 & BPM 20-50", "totalPrice": 28 }, { "_id": "Age 15-20 & BPM 40-90", "totalPrice": 14 } ]
自定义调整说明
如果需要新增分组或修改范围,直接在$switch的branches数组中添加或修改分支即可。每个分支用$and组合多字段的范围条件,then定义分组名称。
内容的提问来源于stack exchange,提问作者Md. Rubel Mia
相关产品推荐
相关产品推荐

