MongoDB $add 运算符介绍

MongoDB $add 运算符可以用于将多个数字相加,它可以接受任意数量的参数。 $add 运算符在聚合管道中的使用场景很多,比如计算总价、计算得分等等。

语法

$add 运算符的语法如下:

{ $add: [ <expression1>, <expression2>, ... ] }

其中,<expression> 是任意表达式,可以是数字、字段、算术表达式等。 $add 运算符将所有表达式相加并返回结果。

使用场景

$add 运算符常用于聚合管道中的 $project$group$addFields 阶段,用于将多个表达式相加并生成新的字段或值。

示例

示例 1:计算商品销售总价值

假设有一份包含商品销售记录的集合,记录了商品名称、销售数量和销售金额。现在要计算每个商品的销售总价值。以下是查询语句:

db.sales.aggregate([
  {
    $project: {
      _id: 0,
      name: 1,
      totalValue: { $add: [{ $multiply: ["$qty", "$price"] }] }
    }
  }
])

以下是结果:

{ "name" : "A", "totalValue" : 100 }
{ "name" : "B", "totalValue" : 50 }
{ "name" : "C", "totalValue" : 60 }
{ "name" : "D", "totalValue" : 85 }
{ "name" : "E", "totalValue" : 95 }

示例 2:计算两个时间字段之间的时间差

假设有一份包含用户登录记录的集合,记录了用户 ID、登录时间和退出时间。现在要计算每个用户的登录时长。以下是查询语句:

db.logins.aggregate([
  {
    $project: {
      _id: 0,
      userId: 1,
      timeDiff: {
        $divide: [{ $subtract: ["$logoutTime", "$loginTime"] }, 1000 * 60]
      }
    }
  },
  {
    $group: {
      _id: "$userId",
      totalLoginTime: { $add: "$timeDiff" }
    }
  }
])

以下是结果:

{ "_id" : 1001, "totalLoginTime" : 140 }
{ "_id" : 1002, "totalLoginTime" : 192 }
{ "_id" : 1003, "totalLoginTime" : 98 }
{ "_id" : 1004, "totalLoginTime" : 116 }
{ "_id" : 1005, "totalLoginTime" : 184 }
{ "_id" : 1006, "totalLoginTime" : 132 }
{ "_id" : 1007, "totalLoginTime" : 94 }
{ "_id" : 1008, "totalLoginTime" : 108 }
{ "_id" : 1009, "totalLoginTime" : 122 }
{ "_id" : 1010, "totalLoginTime" : 90 }

结论

$add 运算符可以用于将多个数字相加,它可以接受任意数量的参数。 $add 运算符在聚合管道中的使用场景很多,比如计算总价、计算得分等等。