$dateToParts (aggregation)

在本页面

Definition

返回一个文档,该文档包含给定 BSON 日期值的组成部分作为单个属性。返回的属性是yearmonthdayhourminutesecondmillisecond

您可以将iso8601属性设置为true来返回代表ISO 周日期的 Component。这将返回属性为isoWeekYearisoWeekisoDayOfWeekhourminutesecondmillisecond的文档。

$dateToParts表达式具有以下语法:

{
    $dateToParts: {
        'date' : <dateExpression>,
        'timezone' : <timezone>,
        'iso8601' : <boolean>
    }
}

$dateToParts接收具有以下字段的文档:

Field Required/Optional Description
date Required 在版本 3.6 中更改。


退回 Component 的 Importing 日期。 <dateExpression>可以是解析为DateTimestampObjectID的任何expression。有关表达式的更多信息,请参见Expressions
| timezone |可选|用于格式化日期的时区。默认情况下,$dateToParts使用 UTC。
<timezone>可以是任何expression,其结果为以下值之一的字符串:
奥尔森时区标识符(例如"Europe/London""America/New_York"),或
UTC 偏移量,格式为:
+/-[hh]:[mm],例如"+04:45",或
+/-[hh][mm],例如"-0530",或
+/-[hh],例如"+03"
有关表达式的更多信息,请参见Expressions
| iso8601 |可选|如果设置为true,则将输出文档修改为使用 ISO 周日期字段。默认为false

Behavior

<timezone>字段中使用 Olson 时区标识符时,MongoDB 将应用 DST 偏移(如果适用于指定时区)。

例如,考虑包含以下文档的sales集合:

{
   "_id" : 1,
   "item" : "abc",
   "price" : 20,
   "quantity" : 5,
   "date" : ISODate("2017-05-20T10:24:51.303Z")
}

以下汇总说明了 MongoDB 如何处理 Olson 时区标识符的 DST 偏移量。该示例使用$hour$minute运算符返回date字段的相应部分:

db.sales.aggregate([
{
   $project: {
      "nycHour": {
         $hour: { date: "$date", timezone: "-05:00" }
       },
       "nycMinute": {
          $minute: { date: "$date", timezone: "-05:00" }
       },
       "gmtHour": {
          $hour: { date: "$date", timezone: "GMT" }
       },
       "gmtMinute": {
          $minute: { date: "$date", timezone: "GMT" } },
       "nycOlsonHour": {
          $hour: { date: "$date", timezone: "America/New_York" }
       },
       "nycOlsonMinute": {
          $minute: { date: "$date", timezone: "America/New_York" }
       }
   }
}])

该操作返回以下结果:

{
   "_id": 1,
   "nycHour" : 5,
   "nycMinute" : 24,
   "gmtHour" : 10,
   "gmtMinute" : 24,
   "nycOlsonHour" : 6,
   "nycOlsonMinute" : 24
}

Example

考虑包含以下文档的sales集合:

{
  "_id" : 2,
  "item" : "abc",
  "price" : 10,
  "quantity" : 2,
  "date" : ISODate("2017-01-01T01:29:09.123Z")
}

以下聚合使用$dateToParts返回包含date字段的组成部分的文档。

db.sales.aggregate([
 {
    $project: {
       date: {
          $dateToParts: { date: "$date" }
       },
       date_iso: {
          $dateToParts: { date: "$date", iso8601: true }
       },
       date_timezone: {
          $dateToParts: { date: "$date", timezone: "America/New_York" }
       }
    }
}])

该操作返回以下结果:

{
   "_id" : 2,
   "date" : {
      "year" : 2017,
      "month" : 1,
      "day" : 1,
      "hour" : 1,
      "minute" : 29,
      "second" : 9,
      "millisecond" : 123
   },
   "date_iso" : {
      "isoWeekYear" : 2016,
      "isoWeek" : 52,
      "isoDayOfWeek" : 7,
      "hour" : 1,
      "minute" : 29,
      "second" : 9,
      "millisecond" : 123
   },
   "date_timezone" : {
      "year" : 2016,
      "month" : 12,
      "day" : 31,
      "hour" : 20,
      "minute" : 29,
      "second" : 9,
      "millisecond" : 123
   }
}
首页