$month(获取月份)
最后更新:2026-10-09
$month(获取月份)
$month 返回日期中的月份(1 到 12),是按月统计报表最常用的表达式之一。常配合 $year 一起作为 $group 的分组键,生成「年-月」维度。返回整数,不补零,需要两位字符串时用 $dateToString 的 %m。timezone 决定月份边界,缺省为 UTC,做业务月报务必显式指定时区。
| 分类 | 日期 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $month: { date: <日期表达式>, timezone: <时区> } }
⚙️ 参数
| date | 必填,日期表达式。 |
|---|---|
| timezone | 可选,计算依据的时区,缺省 UTC。 |
返回值:月份(1-12)整数;date 为 null 时返回 null。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $month + $year:按月统计订单额
db.orders.aggregate([
{ $group: {
_id: { y: { $year: { date: '$orderDate' } }, m: { $month: { date: '$orderDate' } } },
total: { $sum: '$amount' }
} }
])
运行结果:
{ "_id": { "y": 2026, "m": 9 }, "total": 45600 }
{ "_id": { "y": 2026, "m": 10 }, "total": 52300 }
📌 注意事项
- 1 月为 1,12 月为 12
- 月份与年份要配套使用,单独按月分组会跨年混淆
- timezone 缺省为 UTC,做业务月报务必显式指定时区
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q返回 1 到 12 吗?
A是的,1 月为 1、12 月为 12。
Q怎么输出成 2026-09 这样的字符串?
A用 $dateToString 的 %Y-%m 格式,或 $month 配 $year 后自行拼接。
Q为什么我的月度统计错位了?
A多半是时区问题,给 timezone 传本地时区(如 Asia/Shanghai)即可。