$dateToParts (aggregation)
On this page本页内容
Definition定义
- $dateToParts
- 
Returns a document that contains the constituent parts of a given BSON Date value as individual properties.返回一个文档,该文档包含作为单个属性的给定BSON日期值的组成部分。The properties returned are返回的属性为year,month,day,hour,minute,secondandmillisecond.year、month、day、hour、minute、second和millisecond。You can set the您可以将iso8601property totrueto return the parts representing an ISO week dateinstead. iso8601属性设置为true,以返回表示ISO周日期的成份。 This will return a document where the properties are这将返回一个文档,其中属性为isoWeekYear,isoWeek,isoDayOfWeek,hour,minute,secondandmillisecond.isoWeekYear、isoWeek、isoDayOfWeek、hour、minute、second和millisecond。The$dateToPartsexpression has the following syntax:$dateToParts表达式具有以下语法:{
 $dateToParts: {
 'date' : <dateExpression>,
 'timezone' : <timezone>,
 'iso8601' : <boolean>
 }
 }The$dateToPartstakes a document with the following fields:$dateToParts获取一个包含以下字段的文档:Field字段Required/Optional必需/可选Description描述dateRequired必要的
 Changed in version 3.6.3.6版更改。
 The input date for which to return parts.返回零件的输入日期。<dateExpression>can be any expression that resolves to a Date, a Timestamp, or an ObjectID.可以是解析为Date、Timestamp或ObjectID的任何表达式。For more information on expressions, see Expressions.有关表达式的详细信息,请参阅表达式。timezoneOptional可选的The timezone to use to format the date.用于设置日期格式的时区。By default,默认情况下,$dateToPartsuses UTC.$dateToParts使用UTC。
 <timezone>can be any expression that evaluates to a string whose value is either:可以是任何计算为字符串的表达式,该字符串的值为:- an Olson Timezone Identifier奥尔森时区标识符- , such as - "Europe/London"or- "America/New_York", or- ,如 - "Europe/London"或- "America/New_York",或
- a UTC offset in the form:UTC偏移量,格式为:- +/-[hh]:[mm], e.g.- "+04:45", or
- +/-[hh][mm], e.g.- "-0530", or
- +/-[hh], e.g.- "+03".
 
 For more information on expressions, see Expressions.有关表达式的详细信息,请参阅表达式。iso8601Optional可选的If set to如果设置为true, modifies the output document to use ISO week date fields.true,则修改输出文档以使用ISO周日期字段。Defaults to默认为false.false。
Behavior行为
When using an Olson Timezone Identifier in the 当在<timezone> field, MongoDB applies the DST offset if applicable for the specified timezone.<timezone>字段中使用Olson时区标识符时,MongoDB会应用DST偏移量(如果适用于指定时区)。
For example, consider a 例如,考虑具有以下文档的sales collection with the following document:sales集合:
{
   "_id" : 1,
   "item" : "abc",
   "price" : 20,
   "quantity" : 5,
   "date" : ISODate("2017-05-20T10:24:51.303Z")
}
The following aggregation illustrates how MongoDB handles the DST offset for the Olson Timezone Identifier. 下面的聚合说明了MongoDB如何处理Olson时区标识符的DST偏移量。The example uses the 该示例使用$hour and $minute operators to return the corresponding portions of the date field:$hour和$minute运算符返回日期字段的相应部分:
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" }
}
}
}])
The operation returns the following result:该操作返回以下结果:
{
   "_id": 1,
   "nycHour" : 5,
   "nycMinute" : 24,
   "gmtHour" : 10,
   "gmtMinute" : 24,
   "nycOlsonHour" : 6,
   "nycOlsonMinute" : 24
}
Example实例
Consider a 考虑一个带有以下文档的sales collection with the following document:sales集合:
{
  "_id" : 2,
  "item" : "abc",
  "price" : 10,
  "quantity" : 2,
  "date" : ISODate("2017-01-01T01:29:09.123Z")
}
The following aggregation uses 以下聚合使用$dateToParts to return a document that contains the constituent parts of the date field.$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" }
}
}
}])
The operation returns the following result:该操作返回以下结果:
{
   "_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
   }
}