MongoDB聚合分组中子集合计数:按品牌统计车辆特征总数
按品牌分组统计features总数的MongoDB实现
嘿,作为MongoDB新手碰到这种分组统计需求很正常,我来给你一步步讲清楚怎么实现!
你的需求核心是:按make字段分组,累加每个品牌下所有车辆的features数组的元素总数。用MongoDB的聚合框架就能轻松搞定,核心是结合$group、$sum和$size这几个操作符。
基础实现代码
db.cars.aggregate([ { $group: { _id: "$make", // 按品牌字段分组 totalFeatures: { $sum: { $size: "$features" } // 累加每个文档的features数组长度 } } } ])
代码解释:
$group:聚合的核心阶段,指定用make字段作为分组依据(_id: "$make")。$size: "$features":计算单条文档中features数组的元素个数,空数组的话结果就是0。$sum:把同一品牌下所有文档的features长度加起来,得到该品牌的总features数。
优化输出格式(可选)
如果你觉得结果里的_id字段不够直观,可以加一个$project阶段,把_id重命名为make,同时隐藏原_id:
db.cars.aggregate([ { $group: { _id: "$make", totalFeatures: { $sum: { $size: "$features" } } } }, { $project: { _id: 0, // 隐藏默认的_id字段 make: "$_id", // 将原_id的值赋值给新的make字段 totalFeatures: 1 // 保留totalFeatures字段 } } ])
适配你的金融应用场景
你提到这是类比场景,实际在金融应用里遇到类似问题——比如按用户分组统计交易记录数、按产品类别统计附加条款总数等,这个逻辑完全可以复用:只需要把make换成你的分组字段,features换成对应的数组字段就行,核心都是按指定字段分组 + 累加数组长度。
内容的提问来源于stack exchange,提问作者Danish
相关产品推荐
相关产品推荐

