聚合运算符$dateTrunc用于将日期字段的时间部分截断到指定的单位。
$dateTrunc 可以用于以下场景:
- 按指定的时间单位对日期进行截断:这意味着可以将日期字段舍入到最近的单位,如天、小时、分钟等。例如,将所有记录舍入到最近的小时。
- 在聚合查询中按截断后的日期进行分组:当结合
$group操作符使用时,dateTrunc可以帮助你按照截断后的日期进行分组,这对于生成时间序列数据的报告非常有用。例如,要统计每个月的销售总额,可以先使用dateTrunc 可以帮助你按照截断后的日期进行分组,这对于生成时间序列数据的报告非常有用。例如,要统计每个月的销售总额,可以先使用dateTrunc可以帮助你按照截断后的日期进行分组,这对于生成时间序列数据的报告非常有用。例如,要统计每个月的销售总额,可以先使用dateTrunc 将销售日期截断到月份,然后再使用$group进行分组和求和。 - 精确控制日期字段的显示和比较:通过截断日期,可以确保在进行比较或排序时,只考虑日期的特定部分,从而得到更精确的结果。
- 处理时间序列数据:在处理时间序列数据时,
$dateTrunc可以用来更好地分析和汇总数据,比如计算特定时间段内的平均销售额或用户活跃度等。
语法
{
$dateTrunc: {
date: <Expression>,
unit: <Expression>,
binSize: <Expression>,
timezone: <tzExpression>,
startOfWeek: <Expression>
}
}
字段说明
| 字段 | 是否必须 | 描述 |
|---|---|---|
date |
是 | 要截断的日期(UTC),可以是日期、时间戳或对象Id表达式 |
unit |
是 | 要增加的时间的单位,单位可以是能被解析为下列值的表达式:year、quarter、week、month、day、hour、minute、second、millisecond,与binSize一起指定时间段 |
binSize |
否 | 时间数值,以表达式形式指定,必须是非零正数。默认值为 1。 |
timezone |
否 | 执行操作的时区,<tzExpression>必须是能被解析为奥尔森时区标识符格式的字符串或UTC偏移量,如果timezone不指定,返回值显示为UTC |
startOfWeek |
否 | 指定周开始的天,只有当单位是周时可用,缺省为Sunday,startOfWeek可以是一个表达式,但必须能够被解析为:monday (或 mon)、tuesday (或 tue)、wednesday (或 wed)、thursday (或 thu)、friday (或 fri)、saturday (或 sat)、sunday (或 sun) |
使用
- 除
startOfWeek字段外的其他字段如果缺失或为空,亦或者unit为week并且startOfWeek缺失或为null,直接返回null。 - 对于1583年之前的日期使用预推公历。
- 计算夏令时,不计算闰秒。
binSize和unit字段
-
binSize和unit一起用于指定$dateTrunc计算的时间段,例如:- 若
binSize为1且unit为hour,则时间段为1小时,对于日期2021-03-20T11:30:05Z,$dateTrunc返回2021-03-20T11:00:00Z。 - 若
binSize为2且unit为hour,则时间段为2小时,对于日期2021-03-20T11:30:05Z,$dateTrunc返回2021-03-20T10:00:00Z。
- 若
-
$dateTrunc截取以unit为单位,binSize个时间段,时段开始于基准日期,并且由unit决定:- 如果
unit是除week外的其他值,$dataTrunc使用参考日期,拿2000-01-01T00:00:00.00Z,例来说,如果binSize为10,并且单位unit为年,示例的时间段为:2000-01-01T00:00:00.00Z2010-01-01T00:00:00.00Z2020-01-01T00:00:00.00Z
- 如果
unit的值是week,则$dateTrunc使用一周中的首日作为基准日期,可能会大于等于2000-01-01,首日由startOfWeek指定。
- 如果
-
$dateTrunc以ISODate格式返回日期时段的下边界,如果binSize的值为1,$dateTrunc将unit指定单位后面的值设置为0,其余部分保持不变。 -
当unit为:
year,以date所在年度1月1日为基准 <

最低0.47元/天 解锁文章
1410

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



