MongoDB $subtract 运算符介绍

$subtract 运算符是 MongoDB 中的一个数学运算符,用于计算两个数值之间的差值,并返回计算结果。该运算符常用于聚合管道中。

语法

$subtract 运算符的语法如下:

{ $subtract: [ <expression1>, <expression2> ] }

其中,<expression1><expression2> 都是表示数字或可计算的表达式的参数。该运算符返回 <expression1> 减去 <expression2> 的结果。

使用场景

$subtract 运算符常用于聚合管道中,可以计算某些字段之间的差值并创建新字段,或在 $project 阶段计算表达式的结果。例如,可以使用 $subtract 计算销售订单中购买数量和退货数量之间的差值,或计算某个日期字段与当前日期之间的天数差。

示例

以下是 $subtract 运算符的两个示例。

示例数据

考虑以下示例数据:

{
  "_id": 1,
  "price": 10,
  "cost": 5
},
{
  "_id": 2,
  "price": 15,
  "cost": 8
},
{
  "_id": 3,
  "price": 20,
  "cost": 10
}

示例 1:计算成本价差值

假设我们想要计算每个文档的成本价差值(cost_diff),即成本价与 5 的差值。我们可以使用 $subtract 运算符来实现:

db.products.aggregate([
  {
    $project: {
      _id: 1,
      price: 1,
      cost: 1,
      cost_diff: { $subtract: ["$cost", 5] }
    }
  }
])

该聚合管道将输出以下文档:

{
  "_id": 1,
  "price": 10,
  "cost": 5,
  "cost_diff": 0
},
{
  "_id": 2,
  "price": 15,
  "cost": 8,
  "cost_diff": 3
},
{
  "_id": 3,
  "price": 20,
  "cost": 10,
  "cost_diff": 5
}

示例 2:计算日期时间差值

假设我们有一个包含了订单日期和交付日期的集合,我们想要计算每个订单的交付时间(以毫秒为单位)。我们可以使用 $subtract 运算符来计算时间差:

db.orders.aggregate([
  {
    $project: {
      _id: 1,
      order_date: 1,
      delivery_date: 1,
      delivery_time: { $subtract: ["$delivery_date", "$order_date"] }
    }
  }
])

该聚合管道将输出以下文档:

{
  "_id": 1,
  "order_date": ISODate("2022-02-01T00:00:00Z"),
  "delivery_date": ISODate("2022-02-05T00:00:00Z"),
  "delivery_time": 345600000
},
{
  "_id": 2,
  "order_date": ISODate("2022-03-01T00:00:00Z"),
  "delivery_date": ISODate("2022-03-03T00:00:00Z"),
  "delivery_time": 172800000
}

示例 3:计算两个字段之间的差值并创建新字段

假设有以下 sales 集合:

{ _id: 1, item: "apple", quantity: 10, returned: 2 }
{ _id: 2, item: "banana", quantity: 20, returned: 5 }
{ _id: 3, item: "pear", quantity: 15, returned: 3 }

我们可以使用 $subtract 计算 quantityreturned 之间的差值,并创建一个新的 net_quantity 字段:

db.sales.aggregate([
  {
    $project: {
      _id: 1,
      item: 1,
      net_quantity: { $subtract: ["$quantity", "$returned"] }
    }
  }
])

执行上述聚合操作后,将得到以下结果:

{ "_id": 1, "item": "apple", "net_quantity": 8 }
{ "_id": 2, "item": "banana", "net_quantity": 15 }
{ "_id": 3, "item": "pear", "net_quantity": 12 }

结论

$subtract 运算符是 MongoDB 中的一个数学运算符,用于计算两个数值之间的差值,并返回计算结果。该运算符常用于聚合管道中。