如何对MongoDB集合中所有pax数组的元素总数求和?
计算MongoDB集合中所有pax数组的元素总数之和
嘿,我懂你的需求——你已经能算出单条文档里pax数组的元素个数,现在就差把所有文档的这个数值加总对吧?这在MongoDB的聚合框架里很好实现,我给你两种方案,一种分步清晰,一种高效精简:
方案一:分步实现(易懂直观)
先给每个文档新增字段存储pax数组的长度,再全局汇总求和:
db.yourCollection.aggregate([ // 给每个文档添加paxCount字段,值为当前pax数组的元素数量 { $addFields: { paxCount: { $size: "$pax" } } }, // 全局分组,累加所有文档的paxCount { $group: { _id: null, // _id设为null表示不按任何字段分组,只做全局统计 totalPaxElements: { $sum: "$paxCount" } } } ])
方案二:精简高效版(一步到位)
不用新增中间字段,直接在求和阶段嵌套$size操作,性能更优:
db.yourCollection.aggregate([ { $group: { _id: null, totalPaxElements: { $sum: { $size: "$pax" } } } } ])
可选优化:过滤无效文档
如果集合里存在pax字段不存在、或不是数组的文档,建议先加$match阶段过滤,避免计算出错:
db.yourCollection.aggregate([ { $match: { pax: { $exists: true, $type: "array" } } }, { $group: { _id: null, totalPaxElements: { $sum: { $size: "$pax" } } } } ])
执行后你会得到类似这样的结果:
{ "_id" : null, "totalPaxElements" : 123 }
这里的totalPaxElements就是所有文档pax数组的元素总数之和啦!
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

