全国网站建设企业,做网站数据库有哪些,wordpress怎么修改头像,上海计算机网页制作聚合运算符$dateTrunc用于将日期字段的时间部分截断到指定的单位。
$dateTrunc 可以用于以下场景#xff1a;
按指定的时间单位对日期进行截断#xff1a;这意味着可以将日期字段舍入到最近的单位#xff0c;如天、小时、分钟等。例如#xff0c;将所有记录舍入到最近的小…聚合运算符$dateTrunc用于将日期字段的时间部分截断到指定的单位。
$dateTrunc 可以用于以下场景
按指定的时间单位对日期进行截断这意味着可以将日期字段舍入到最近的单位如天、小时、分钟等。例如将所有记录舍入到最近的小时。在聚合查询中按截断后的日期进行分组当结合$group操作符使用时 d a t e T r u n c 可以帮助你按照截断后的日期进行分组这对于生成时间序列数据的报告非常有用。例如要统计每个月的销售总额可以先使用 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不指定返回值显示为UTCstartOfWeek否指定周开始的天只有当单位是周时可用缺省为SundaystartOfWeek可以是一个表达式但必须能够被解析为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日为基准quarter以date所属季度的第一天为基准month以date所属月份的第一天为基准week以date所在周中startOfWeek指定的那一天为基准缺省为Sundayday以date为基准hour以date的小时为基准minute以date的分钟为基准second以date的秒为基准
unit和startOfWeek字段
如果unit的值不等于weekstartOfWeek将被忽略如果unit的值等于week当指定startOfWeek时使用startOfWeek指定值作为周的第一天。否则使用Sunday。
举例
创建一个包含加利福尼亚州CA和华盛顿州WA蛋糕销售记录的集合cakeSales
db.cakeSales.insertMany( [{ _id: 0, type: chocolate, orderDate: new Date(2020-05-18T14:10:30Z),state: CA, price: 13, quantity: 120 },{ _id: 1, type: chocolate, orderDate: new Date(2021-03-20T11:30:05Z),state: WA, price: 14, quantity: 140 },{ _id: 2, type: vanilla, orderDate: new Date(2021-01-11T06:31:15Z),state: CA, price: 12, quantity: 145 },{ _id: 3, type: vanilla, orderDate: new Date(2020-02-08T13:13:23Z),state: WA, price: 13, quantity: 104 },{ _id: 4, type: strawberry, orderDate: new Date(2019-05-18T16:09:01Z),state: CA, price: 41, quantity: 162 },{ _id: 5, type: strawberry, orderDate: new Date(2019-01-08T06:12:03Z),state: WA, price: 43, quantity: 134 }
] )在$project管道阶段截取订单日期
db.cakeSales.aggregate( [{$project: {_id: 1,orderDate: 1,truncatedOrderDate: {$dateTrunc: {date: $orderDate, unit: week, binSize: 2,timezone: America/Los_Angeles, startOfWeek: Monday}}}}
] )本例中
$project将文档的_id、orderDate和truncatedOrderDate字段输出到下一阶段$dateTrunc使用binSize为2unit为week时区为America/Los_AngelesstartOfWeek为Monday对orderDate字段进行截取
结果如下
[{_id: 0,orderDate: ISODate(2020-05-18T14:10:30.000Z),truncatedOrderDate: ISODate(2020-05-11T07:00:00.000Z)},{_id: 1,orderDate: ISODate(2021-03-20T11:30:05.000Z),truncatedOrderDate: ISODate(2021-03-15T07:00:00.000Z)},{_id: 2,orderDate: ISODate(2021-01-11T06:31:15.000Z),truncatedOrderDate: ISODate(2021-01-04T08:00:00.000Z)},{_id: 3,orderDate: ISODate(2020-02-08T13:13:23.000Z),truncatedOrderDate: ISODate(2020-02-03T08:00:00.000Z)},{_id: 4,orderDate: ISODate(2019-05-18T16:09:01.000Z),truncatedOrderDate: ISODate(2019-05-13T07:00:00.000Z)},{_id: 5,orderDate: ISODate(2019-01-08T06:12:03.000Z),truncatedOrderDate: ISODate(2019-01-07T08:00:00.000Z)}
]在$group阶段对分组日期字段进行截取
下面的例子在$group阶段使用dateTrunc对蛋糕销售记录的orderDate值按照6个月进行截断然后进行分组汇总
db.cakeSales.aggregate( [{$group: {_id: {truncatedOrderDate: {$dateTrunc: {date: $orderDate, unit: month, binSize: 6}}},sumQuantity: { $sum: $quantity }}}
] )在本例中
$group将truncatedOrderDate作为_id字段对cakeSales文档进行分组使用$sum对分组内的quantity字段值进行合计$dateTrunc以6个月的间隔对orderDate进行截取
结果如下
[{_id: { truncatedOrderDate: ISODate(2020-01-01T00:00:00.000Z) },sumQuantity: 224},{_id: { truncatedOrderDate: ISODate(2021-01-01T00:00:00.000Z) },sumQuantity: 285},{_id: { truncatedOrderDate: ISODate(2019-01-01T00:00:00.000Z) },sumQuantity: 296}
]