$dateSubtract聚合运算符将Date()对象按指定的时间单位递减。从版本5.0开始支持。
语法
{
$dateSubtract: {
startDate: <Expression>,
unit: <Expression>,
amount: <Expression>,
timezone: <tzExpression>
}
}
返回一个日期对象Date(),startDate可以是任何能被解析为日期、时间戳或对象Id的表达式,这三种类型都会返回Date()对象。
参数字段说明:
|字段|是否必须|描述|
|-|-|
|startDate|是|开始日期(UTC),可以是日期、时间戳或对象Id表达式|
|unit|是|要增加的时间的单位,单位可以是能被解析为下列值的表达式:year、quarter、week、month、day、hour、minute、second、millisecond|
|amount|是|以units为单位,在startDate基础上的增量,amount是可以被解析为整数、小数或双精度数的表达式|
|timezone|否|执行操作的时区,<tzExpression>必须是能被解析为奥尔森时区标识符格式的字符串或UTC偏移量,如果timezone不指定,返回值显示为UTC|
使用
时间测量
MongoDB遵循流行的数据库用法,以UTC为时间单位工作。dateSubtract表达式总是以 UTC 为起始日期,并以 UTC 为结果返回。如果指定了时区,计算将使用指定的时区进行。当计算涉及夏令时(DST)时,时区尤为重要。
如果单位是一个月或更大,操作会根据该月的最后一天进行调整。例如,在 10 月的最后一天增加一个月,这就是 "月末最后一天 "调整。
{
$dateSubtract:
{
startDate: ISODate("2021-03-31T12:10:05Z"),
unit: "month",
amount: 1
}
}
注意:返回的日期ISODate("2020-11-30T12:10:05Z")是30日,而不是 31日,因为11月的天数比10月少。
时区
在<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" }

本文介绍了MongoDB中的$dateSubtract聚合运算符,用于日期减法操作,包括处理时区、夏令时调整以及示例展示了如何从登录时间中减去固定数量并根据时区进行调整。
最低0.47元/天 解锁文章
652

被折叠的 条评论
为什么被折叠?



