$dateToParts
聚合运算符将日期表达式拆分成多个字段放在一个文档返回,属性有year
、month
、day
、hour
、minute
、second
和millisecond
。如果iso8601
属性设置为true
,返回的各部分用ISO周日期返回,属性分别是:isoWeekYear
、isoWeek
、isoDayOfWeek
、hour
、minute
、second
和millisecond
。
语法
{$dateToParts: {'date' : <dateExpression>,'timezone' : <timezone>,'iso8601' : <boolean>}
}
字段说明:
字段 | 是否必须 | 描述 |
---|---|---|
date | 是 | <dateExpression> 可以是日期、时间戳或对象Id表达式 |
timezone | 否 | 执行操作的时区,<tzExpression> 必须是能被解析为奥尔森时区标识符格式的字符串或UTC偏移量,如果timezone 不指定,返回值显示为UTC |
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
操作符返回日期字段的相应部分:
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
返回包含日期字段各组成部分的文档。
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}
}