$dateToParts (aggregation)

    在本页面

    $dateToParts

    3.6版的新功能。

    返回包含给定BSON日期值的组成部分作为单个属性的文档。返回的属性yearmonthdayhourminutesecondmillisecond

    您可以将iso8601属性设置为true,以返回代表ISO周日期的部分 。这将返回一个文档,其中的属性是 isoWeekYearisoWeekisoDayOfWeekhourminutesecondmillisecond

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

    1. {
    2. $dateToParts: {
    3. 'date' : <dateExpression>,
    4. 'timezone' : <timezone>,
    5. 'iso8601' : <boolean>
    6. }
    7. }

    $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包含以下文档的集合:

    1. {
    2. "_id" : 1,
    3. "item" : "abc",
    4. "price" : 20,
    5. "quantity" : 5,
    6. "date" : ISODate("2017-05-20T10:24:51.303Z")
    7. }

    以下汇总说明了MongoDB如何处理Olson时区标识符的DST偏移量。该示例使用 $hour$minute运算符返回date字段的相应部分:

    1. db.sales.aggregate([
    2. {
    3. $project: {
    4. "nycHour": {
    5. $hour: { date: "$date", timezone: "-05:00" }
    6. },
    7. "nycMinute": {
    8. $minute: { date: "$date", timezone: "-05:00" }
    9. },
    10. "gmtHour": {
    11. $hour: { date: "$date", timezone: "GMT" }
    12. },
    13. "gmtMinute": {
    14. $minute: { date: "$date", timezone: "GMT" } },
    15. "nycOlsonHour": {
    16. $hour: { date: "$date", timezone: "America/New_York" }
    17. },
    18. "nycOlsonMinute": {
    19. $minute: { date: "$date", timezone: "America/New_York" }
    20. }
    21. }
    22. }])

    该操作返回以下结果:

    1. {
    2. "_id": 1,
    3. "nycHour" : 5,
    4. "nycMinute" : 24,
    5. "gmtHour" : 10,
    6. "gmtMinute" : 24,
    7. "nycOlsonHour" : 6,
    8. "nycOlsonMinute" : 24
    9. }

    例子

    考虑sales包含以下文档的集合:

    1. {
    2. "_id" : 2,
    3. "item" : "abc",
    4. "price" : 10,
    5. "quantity" : 2,
    6. "date" : ISODate("2017-01-01T01:29:09.123Z")
    7. }

    以下聚合用于$dateToParts返回包含date字段组成部分的文档。

    1. db.sales.aggregate([
    2. {
    3. $project: {
    4. date: {
    5. $dateToParts: { date: "$date" }
    6. },
    7. date_iso: {
    8. $dateToParts: { date: "$date", iso8601: true }
    9. },
    10. date_timezone: {
    11. $dateToParts: { date: "$date", timezone: "America/New_York" }
    12. }
    13. }
    14. }])

    该操作返回以下结果:

    1. {
    2. "_id" : 2,
    3. "date" : {
    4. "year" : 2017,
    5. "month" : 1,
    6. "day" : 1,
    7. "hour" : 1,
    8. "minute" : 29,
    9. "second" : 9,
    10. "millisecond" : 123
    11. },
    12. "date_iso" : {
    13. "isoWeekYear" : 2016,
    14. "isoWeek" : 52,
    15. "isoDayOfWeek" : 7,
    16. "hour" : 1,
    17. "minute" : 29,
    18. "second" : 9,
    19. "millisecond" : 123
    20. },
    21. "date_timezone" : {
    22. "year" : 2016,
    23. "month" : 12,
    24. "day" : 31,
    25. "hour" : 20,
    26. "minute" : 29,
    27. "second" : 9,
    28. "millisecond" : 123
    29. }
    30. }

    译者:李冠飞

    校对: