$dateTrunc(日期截断)

最后更新:2026-10-09

$dateTrunc(日期截断)

$dateTrunc 将日期截断到指定时间单位的起点,返回截断后的新日期,适合按小时、天、月等粒度对齐时间戳做分组统计。unit 支持 year、quarter、month、week、day、hour、minute、second;binSize 可把单位放大成桶(如每 3 小时一个桶)。startOfWeek 仅对 week 生效,指定一周从哪天开始。timezone 决定截断所依据的时区日历,跨时区统计务必显式设置。本操作符在 MongoDB 5.0 引入。

分类日期
MongoDB 版本5.0+
示例语言mongosh (Shell)

📝 语法

{ $dateTrunc: { date: <日期表达式>, unit: <时间单位>, binSize: <数值>, timezone: <时区>, startOfWeek: <周起始日> } }

⚙️ 参数

date必填,要截断的日期。
unit必填,截断单位:year、quarter、month、week、day、hour、minute、second。
binSize可选,桶大小,放大单位粒度。
timezone可选,截断依据的时区。
startOfWeek可选,仅 unit 为 week 时生效。

返回值:截断后的新日期(BSON Date);date 为 null 或缺失时返回 null。

▶ 示例

请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):

// $dateTrunc:按小时聚合销售额
 db.sales.aggregate([
  { $group: {
      _id: { $dateTrunc: { date: '$soldAt', unit: 'hour' } },
      total: { $sum: '$amount' }
  } }
])

运行结果:

{ "_id": ISODate("2026-09-25T08:00:00Z"), "total": 1250 }
{ "_id": ISODate("2026-09-25T09:00:00Z"), "total": 980 }

📌 注意事项

更多实战案例即将上线,敬请期待。

📚 相关教程

❓ 常见问题

Q和 $dateAdd 有什么区别?
A$dateTrunc 只把时间对齐到单位起点,不改变粒度;$dateAdd 是移动时间。
QbinSize 是什么意思?
A把单位放大成桶,如 binSize 为 3、unit 为 hour,即每 3 小时一个桶。
Q截断后是几点?
Aunit 为 day 时是当天 00:00,unit 为 hour 时是整点。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏