如何对MongoDB文档内数组中所有对象的指定数字字段求和
解决方案
你只需要用MongoDB内置的$sum运算符就可以快速实现需求,无需复杂的数组拆分操作,3.2及以上版本都支持该语法。
场景1:查询每个文档对应的score数组总得分(保留原文档核心字段)
聚合语句如下,注意将yourCollectionName替换为你实际的集合名称:
db.yourCollectionName.aggregate([ // 如有筛选条件可以在此处添加$match阶段,示例:筛选特定球员 // { $match: { playerName: "Rohit Lal" } }, { $project: { // 按需保留需要的原字段 playerName: 1, tournamentId: 1, // 直接对score数组内所有runsScored字段求和 totalRuns: { $sum: "$score.runsScored" } } } ])
你提供的示例文档运行后将得到结果:
{ "_id": "6278686", "playerName": "Rohit Lal", "tournamentId": "197831", "totalRuns": 21 }
场景2:统计集合内所有文档的所有runsScored总和
如果需要统计全集合的总得分,使用如下聚合语句:
db.yourCollectionName.aggregate([ { $group: { _id: null, allPlayersTotalRuns: { $sum: { $sum: "$score.runsScored" } } } } ])
语法说明
$sum运算符可以直接接收数组字段路径作为参数,自动遍历数组内所有元素累加指定字段的值,不需要额外使用$unwind拆分数组,对初学者非常友好。
内容的提问来源于stack exchange,提问作者Muhammad Danyal
相关产品推荐
相关产品推荐

