$dateSubtract

运算符 $dateSubtract 从日期中减去指定的时间单位。 它可用于计算聚合管道中的过去日期或间隔。

Syntax

{
  $dateSubtract: {
    startDate: <dateExpression>,
    unit: "<unit>",
    amount: <number>,
    timezone: "<timezone>" // optional
  }
}

参数

参数 Description
startDate 要从中减去的日期表达式。
unit 要减去的时间单位(例如“day”、“hour”)。
amount 要减去的时间单位量。
timezone (可选) 日期计算的时区。

例子

让我们了解 stores 数据集中的示例 json 的用法。

{
  "_id": "e6410bb3-843d-4fa6-8c70-7472925f6d0a",
  "name": "Relecloud | Toy Collection - North Jaylan",
  "location": {
    "lat": 2.0797,
    "lon": -94.4134
  },
  "staff": {
    "employeeCount": {
      "fullTime": 7,
      "partTime": 4
    }
  },
  "sales": {
    "salesByCategory": [
      {
        "categoryName": "Educational Toys",
        "totalSales": 3299
      }
    ],
    "revenue": 3299
  },
  "promotionEvents": [
    {
      "eventName": "Massive Markdown Mania",
      "promotionalDates": {
        "startDate": {
          "Year": 2024,
          "Month": 9,
          "Day": 21
        },
        "endDate": {
          "Year": 2024,
          "Month": 9,
          "Day": 29
        }
      },
      "discounts": [
        {
          "categoryName": "Remote Control Toys",
          "discountPercentage": 6
        },
        {
          "categoryName": "Building Sets",
          "discountPercentage": 21
        }
      ]
    }
  ],
  "company": "Relecloud",
  "city": "North Jaylan",
  "lastUpdated": {
    "$timestamp": {
      "t": 1733313006,
      "i": 1
    }
  },
  "storeOpeningDate": "2024-09-05T11:50:06.549Z"
}

示例 1:减去七天

该示例计算字段前一周的 lastUpdated 日期。 查询用于 $dateSubtract 计算时间戳前 storeOpeningDate 七天的日期。

db.stores.aggregate([
  {
    $match: { _id: "e6410bb3-843d-4fa6-8c70-7472925f6d0a" }
  },
  {
    $project: {
      _id: 0,
      dateOneWeekAgo: {
        $dateSubtract: {
          startDate: "$storeOpeningDate",
          unit: "day",
          amount: 7
        }
      }
    }
  }
])

查询返回时间戳前 storeOpeningDate 七天的日期。

{
  "dateOneWeekAgo": "2024-08-29T11:50:06.549Z"
}

示例 2:用时区减去两个小时

此示例将减去两个小时,考虑 China/Shang_hai 时区。 TIMEZONE 错误

db.stores.aggregate([
  {
    $project: {
      _id: 0,
      dateTwoHoursAgo: {
        $dateSubtract: {
          startDate: "$metadata.lastUpdated",
          unit: "hour",
          amount: 2,
          timezone: "China/Shang_hai"
        }
      }
    }
  }
])