定义
返回一群组文档中数值的总和。
$sum累加器可在以下阶段使用:
注意
$sum 的其他用途
本页描述了用作累加器时的 $sum。累加器返回一群组输入文档的聚合值,如总和、最大值或最小值。
您还可以在其他上下文中使用 $sum:
$sum (expression),返回大量中数值的总和。$sum (window function),用于在$setWindowFields阶段计算窗口中值的累积和。
语法
{ $sum: <expression> }
行为
结果类型
当混合输入类型时,$sum 会将较小的输入类型提升为两者中较大的输入类型。当表示更范围的值时,该类型被认为更大。数值类型从小到大的顺序是:整数 → 长整型 → 双精度浮点数 → 十进制。
较大的输入类型也决定了结果类型,除非操作溢出,超出了较大数据类型所代表的范围。在溢出的情况下,$sum 按照以下顺序推送结果:
如果较大的类型为
double或decimal,则溢出结果表示为正无穷大或负无穷大。结果没有类型提升。
非数字或不存在的字段
当您在包含数字值和非数字值的字段上使用 $sum 时,$sum 会忽略非数字值并返回数字值的总和。
当您在集合中的任何文档中都不存在的字段上使用 $sum 时,$sum 会为该字段返回 0。
例子
本页上的示例使用 sample_mflix 数据集中的数据。有关如何将此数据集加载到自管理MongoDB 部署中的详细信息,请参阅加载样本数据集。如果对示例数据库进行了任何修改,则可能需要删除并重新创建数据库才能运行本页上的示例。
以下示例按内容分级对电影进行分组,并返回群组的 IMDb 投票总数。
db.movies.aggregate( [ { $match: { rated: { $in: [ "G", "PG", "PG-13", "R" ] }, "imdb.votes": { $type: "int" } } }, { $group: { _id: "$rated", totalVotes: { $sum: "$imdb.votes" } } }, { $sort: { _id: 1 } } ] )
上述管道:
使用
$match过滤rated值为G、PG、PG-13或R且 IMDb 投票数为整数的电影。使用
$group按rated字段对电影进行群组,并在imdb.votes上使用$sum计算totalVotes。使用
$sort按内容分级的字母顺序返回结果。