如何在MongoDB中汇总总和以获得总数?

Sah*_*bov 57 mongodb aggregation-framework

对于某个带字段的集合,{ wins: Number }我如何使用MongoDB Aggregation Framework获取集合中所有文档的获胜总数?

例:

如果我有3个文件wins: 5,wins: 8,wins: 12分别,我怎么可能使用MongoDB的聚合框架返回的总数,即total: 25.

Wir*_*rie 132

要在使用MongoDB的聚合框架时获取分组字段的总和,您需要使用$group$sum:

db.characters.aggregate([ { 
    $group: { 
        _id: null, 
        total: { 
            $sum: "$wins" 
        } 
    } 
} ] )
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果要获得所有的总和wins,则需要使用$语法来引用字段名称,该语法仅从分组文档中$wins获取wins字段的值并将它们相加在一起.

计数

您也可以sum通过传递特定值(如您在评论中所做的那样)来传递其他值.如果你有

{ "$sum" : 1 },

这实际上是所有的wins,而不是总数的计数.

  • 由于此算法必须扫描每个文档,因此您需要求助于缓存,预先计算或过滤结果以减少花费的总时间. (3认同)
  • 哇,这里的_id:null是关键。您尝试使用+1而不考虑使用_id:null的聚合框架。 (2认同)