$dayOfMonth(获取日)
最后更新:2026-10-09
$dayOfMonth(获取日)
$dayOfMonth 返回日期中的「日」(1 到 31),是聚合管道中按天维度统计的常用表达式。它既可接受单个日期表达式,也可用对象形式显式传 timezone。常用于按日分组订单、生成日期标签或判断是否月初。返回值为整数,时区不同可能得到不同的日,跨时区场景务必指定 timezone,缺省为 UTC。
| 分类 | 日期 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $dayOfMonth: { date: <日期表达式>, timezone: <时区> } }
⚙️ 参数
| date | 必填,日期表达式。 |
|---|---|
| timezone | 可选,计算依据的时区,缺省 UTC。 |
返回值:日期中的日(1-31)整数;date 为 null 时返回 null。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $dayOfMonth:取订单日(北京时间)
db.orders.aggregate([
{ $project: {
day: { $dayOfMonth: { date: '$orderDate', timezone: 'Asia/Shanghai' } }
} }
])
运行结果:
{ "_id": 1, "day": 25 }
{ "_id": 2, "day": 1 }
📌 注意事项
- 返回 1 到 31 的整数,不补零,需要两位显示时用 $dateToString 的 %d
- 与 $dayOfWeek、$dayOfYear 的区别:三者分别返回月内日、周内日、年内日
- date 为 null 或缺失时返回 null
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$dayOfMonth 和 $dateToString 的 %d 有什么区别?
A%d 输出两位字符串(如 05),$dayOfMonth 输出整数(如 5)。
Q结果是 0 开始还是 1 开始?
A1 开始,每月第一天为 1。
Q时区影响结果吗?
A影响,UTC 和本地时区可能得到不同的日,应显式指定 timezone。