在本页面
$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}}
译者:李冠飞
校对:
