$dateFromParts (aggregation)

在本页面

Definition

  • $dateFromParts
    • 3.6 版的新功能。

给定日期的组成属性,构造并返回 Date 对象。

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

{
    $dateFromParts : {
        'year': <year>, 'month': <month>, 'day': <day>,
        'hour': <hour>, 'minute': <minute>, 'second': <second>,
        'millisecond': <ms>, 'timezone': <tzExpression>
    }
}

您还可以使用以下语法以ISO 周日期格式指定组成日期字段:

{
    $dateFromParts : {
        'isoWeekYear': <year>, 'isoWeek': <week>, 'isoDayOfWeek': <day>,
        'hour': <hour>, 'minute': <minute>, 'second': <second>,
        'millisecond': <ms>, 'timezone': <tzExpression>
    }
}

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

FieldRequired/OptionalDescriptionPossible Values
year如果不使用isoWeekYear,则为必填Calendar year.0 - 9999
isoWeekYear如果不使用year,则为必填ISO 周日期年份。0 - 9999
month可选的。只能与year一起使用。月。默认为11 - 12
isoWeek可选的。只能与isoWeekYear一起使用。一年中的一周。默认为11 - 53
day可选的。只能与year一起使用。一个月中的某天。默认为11 - 31
isoDayOfWeek可选的。只能与isoWeekYear一起使用。星期几(星期一1-星期日7)。默认为11 - 7
hourOptional小时。默认为00 - 23
minuteOptional分钟。默认为00 - 59
secondOptional第二。默认为00 - 59
millisecondOptional毫秒。默认为00 - 999
timezoneOptional<timezone>可以是任何expression,其结果为以下值之一的字符串:

奥尔森时区标识符(例如"Europe/London""America/New_York"),或
UTC 偏移量,格式为:
+/-[hh]:[mm],例如"+04:45",或
+/-[hh][mm],例如"-0530",或
+/-[hh],例如"+03"
有关表达式的更多信息,请参见Expressions
时区表达式

Important

构造$dateFromPartsImporting 文档时,不能结合使用 calendar 日期和 ISO 周日期字段。

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

以下聚合使用$dateFromParts从提供的 Importing 字段中构造三个日期对象:

db.sales.aggregate([
{
   $project: {
      date: {
         $dateFromParts: {
            'year' : 2017, 'month' : 2, 'day': 8, 'hour' : 12
         }
      },
      date_iso: {
         $dateFromParts: {
            'isoWeekYear' : 2017, 'isoWeek' : 6, 'isoDayOfWeek' : 3, 'hour' : 12
         }
      },
      date_timezone: {
         $dateFromParts: {
            'year' : 2016, 'month' : 12, 'day' : 31, 'hour' : 23,
            'minute' : 46, 'second' : 12, 'timezone' : 'America/New_York'
         }
      }
   }
}])

该操作返回以下结果:

{
  "_id" : 1,
  "date" : ISODate("2017-02-08T12:00:00Z"),
  "date_iso" : ISODate("2017-02-08T12:00:00Z"),
  "date_timezone" : ISODate("2017-01-01T04:46:12Z")
}