$dateToParts

运算符 $dateToParts 用于从日期对象中提取各个组件(Year、Month、Day、Hour、Minute、Second、Millisecond 等)。 对于需要特定日期部件的作或分析(例如,基于单个日期组件对数据进行排序、筛选或聚合)的情况,运算符非常有用。

Syntax

$dateToParts: {
  date: <dateExpression>,
  timezone: <string>, // optional
  iso8601: <boolean> // optional
}

参数

参数 Description
date 要从中提取部件的日期表达式。
timezone 可选。 指定日期的时区。 如果未提供,则默认为 UTC。
iso8601 可选。 如果为 true,则操作员使用 ISO 8601 周日期日历系统。 默认值为 false。

例子

让我们了解 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:从字段中提取日期部分

查询用于 $dateToPartslastUpdated 日期分解为年份、月、日和时间等组件。 它有助于分析或转换日期的各个部分以供进一步处理。

db.stores.aggregate([
  {
    $match: { _id: "e6410bb3-843d-4fa6-8c70-7472925f6d0a" }
  },
  {
    $project: {
      _id: 0,
      dateParts: {
        $dateToParts: { 
          date: "$lastUpdated" 
        }
      }
    }
  }
])

该示例提取字段的 lastUpdated 构成部分。

{
  "dateParts": {
    "year": 2024,
    "month": 12,
    "day": 4,
    "hour": 11,
    "minute": 50,
    "second": 6,
    "millisecond": 0
  }
}

示例 2:使用时区

该查询提取 lastUpdated 特定文档的时间戳,并使用$dateToParts将其分解为日期部分,例如年、月、日和小时。 包括“中国/Shang_hai”时区允许细分,反映当地时间而不是 UTC。

db.stores.aggregate([
  {
    $match: { _id: "e6410bb3-843d-4fa6-8c70-7472925f6d0a" }
  },
  {
    $project: {
      _id: 0,
      datePartsWithTimezone: {
        $dateToParts: { 
          date: "$lastUpdated", 
          timezone: "China/Shang_hai" 
        }
      }
    }
  }
])

该示例在考虑时区 China/Shang_hai时提取日期部分。

{
  "datePartsWithTimezone": {
    "year": 2024,
    "month": 12,
    "day": 4,
    "hour": 6,
    "minute": 50,
    "second": 6,
    "millisecond": 0
  }
}