MongoDB $sum 运算符介绍

Mongodb $sum 运算符是一个非常实用的聚合运算符,它可以对指定字段进行求和操作。

语法

$sum 运算符的语法非常简单,可以在聚合管道中使用:

$sum: <expression>

其中,<expression> 表示需要求和的字段或表达式。例如,如果要对某个集合中的 score 字段进行求和,可以这样写:

db.collection.aggregate([
  { $group: { _id: "$name", totalScore: { $sum: "$score" } } }
])

这样,就可以对每个 name 字段下的 score 字段进行求和,并将结果保存到 totalScore 字段中。

使用场景

$sum 运算符可以广泛应用于各种聚合场景中,特别适用于需要对指定字段进行数值运算的情况。例如,可以用 $sum 运算符计算某个集合中各个字段的总和,或者对某个字段进行平均值、最大值、最小值等计算。

示例

下面我们将分别介绍 $sum 运算符的三个示例:

示例 1:求和

假设有如下一份成绩单:

{ name: "Alice", score: 85 }
{ name: "Lucy", score: 92 }
{ name: "James", score: 78 }
{ name: "Kobe", score: 90 }

现在,我们希望对这份成绩单中的 score 字段进行求和,可以使用以下聚合管道:

db.scores.aggregate([{ $group: { _id: null, totalScore: { $sum: "$score" } } }])

运行后,将得到如下结果:

{ "_id" : null, "totalScore" : 345 }

示例 2:分组求和

在示例 1 中,我们对整个集合进行了求和操作。现在,假设我们想要对每个学生的成绩进行求和,可以使用以下聚合管道:

db.scores.aggregate([
  { $group: { _id: "$name", totalScore: { $sum: "$score" } } }
])

运行后,将得到如下结果:

{ "_id" : "Alice", "totalScore" : 85 }
{ "_id" : "Lucy", "totalScore" : 92 }
{ "_id" : "James", "totalScore" : 78 }
{ "_id" : "Kobe", "totalScore" : 90 }

示例 3:条件求和

在某些情况下,我们可能需要对满足特定条件的文档进行求和操作。例如,假设我们只想计算成绩大于等于 90 分的学生的总分数,可以使用以下聚合管道:

db.scores.aggregate([
  { $match: { score: { $gte: 90 } } },
  { $group: { _id: null, totalScore: { $sum: "$score" } } }
])

运行后,将得到如下结果:

{ "_id" : null, "totalScore" : 182 }

这里使用了 $match 运算符来筛选出成绩大于等于 90 分的文档,然后再使用 $group 运算符进行求和操作。

结论

总的来说,$sum 运算符是一个非常实用的聚合运算符,可以方便地对指定字段进行求和操作,适用于各种聚合场景。需要注意的是,如果要对多个字段进行求和,可以在 $sum 运算符中使用表达式进行计算。