文档菜单
文档首页
/
MongoDB 手册
/ / /

$dateToParts(聚合查询)

本页内容

  • 定义
  • 行为
  • 示例
$dateToParts

返回包含给定 BSON 日期值的组成部分的文档。返回的属性包括 year(年)、month(月)、day(日)、hour(时)、minute(分)、second(秒)和 millisecond(毫秒)。

可以将 iso8601 属性设置为 true 来返回表示ISO 周日期 的部分。这将返回一个属性为 isoWeekYear(ISO 周年)、isoWeek(ISO 周数)、isoDayOfWeek(ISO 星期)、hour(时)、minute(分)、second(秒)和 millisecond(毫秒)的文档。

$dateToParts 表达式有以下语法

{
$dateToParts: {
'date' : <dateExpression>,
'timezone' : <timezone>,
'iso8601' : <boolean>
}
}

$dateToParts 接受包含以下字段的文档

字段
必需/可选
说明
date
必需
要返回部分的输入日期。 <dateExpression> 可以是任何表达式,该表达式解析为日期、时间戳或 ObjectID。有关表达式的信息,请参阅 表达式运算符
timezone
可选

用于格式化日期的时间区域。默认情况下,$dateToParts 使用 UTC。

<timezone> 可以是任何 表达式,该表达式评估为字符串,其值可以是

  • Olson 时区标识符,例如 Olson 时区标识符,如 "Europe/London""America/New_York",或者

  • 以以下形式的 UTC 偏移量

    • +/-[hh]:[mm],例如 "+04:45",或者

    • +/-[hh][mm],例如 "-0530",或者

    • +/-[hh],例如 "+03"

有关表达式更多信息,请参阅 表达式运算符。

iso8601
可选
如果设置为 true,则修改输出文档以使用 ISO 周日期字段。默认为 false

当在 <timezone> 字段中使用 Olson 时区标识符时,MongoDB 将应用指定时区的 DST 偏移量。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
}

考虑以下文档的销售集合

{
"_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
}
}

返回

$dateSubtract

本页内容