在本页面
$dateToParts
3.6版的新功能。
返回包含给定BSON日期值的组成部分作为单个属性的文档。返回的属性year
,month
,day
,hour
,minute
,second
和millisecond
。
您可以将iso8601
属性设置为true
,以返回代表ISO周日期的部分 。这将返回一个文档,其中的属性是 isoWeekYear
,isoWeek
,isoDayOfWeek
,hour
, minute
,second
和millisecond
。
$dateToParts
表达式具有以下语法:
{
$dateToParts: {
'date' : <dateExpression>,
'timezone' : <timezone>,
'iso8601' : <boolean>
}
}
在$dateToParts
需要具有以下字段的文档:
字段 | 必选/可选 | 描述 |
---|---|---|
year | 必选 | 在版本3.6中更改。 返回部分的输入日期。 <dateExpression> 可以是解析为日期、时间戳或ObjectID的任何表达式。有关表达式的更多信息,请参见表达式。 |
timezone | 可选 | 用于格式化日期的时区。默认情况下, $dateToParts 使用UTC。<timezone> 可以是任何表达式,该表达式的值可以是:1. 一个奥尔森时区标识符,例如 "Europe/London" 或"America/New_York" ,2. UTC偏移量,格式为: a. +/-[hh]:[mm] ,例如"+04:45" b. +/-[hh][mm] ,例如"-0530" c. +/-[hh] 例如"+03" 有关表达式的更多信息,请参见 表达式。 |
iso8601 | 可选 | 如果设置为true ,则修改输出文档以使用ISO周日期字段。默认为false 。 |
行为
在<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
}
例子
考虑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
}
}
译者:李冠飞
校对: