$week(获取周数)
最后更新:2026-10-09
$week(获取周数)
$week 按美国惯例返回日期所在周是全年第几周(0 到 53):每周从周日开始,第 1 周从当年第一个周日算起,之前的日期属于第 0 周。它与 ISO 标准的 $isoWeek 不同,国际化统计建议用 $isoWeek。返回整数,timezone 决定周边界,缺省为 UTC。它可用于美式周维度报表,但涉及国际业务时请优先选择 ISO 标准。
| 分类 | 日期 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $week: { date: <日期表达式>, timezone: <时区> } }
⚙️ 参数
| date | 必填,日期表达式。 |
|---|---|
| timezone | 可选,计算依据的时区,缺省 UTC。 |
返回值:周数(0-53)整数;date 为 null 时返回 null。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $week:按美式周聚合销售额
db.sales.aggregate([
{ $group: {
_id: { $week: { date: '$soldAt', timezone: 'Asia/Shanghai' } },
total: { $sum: '$amount' }
} }
])
运行结果:
{ "_id": 38, "total": 8300 }
{ "_id": 39, "total": 9800 }
📌 注意事项
- 每周从周日开始,年初首周之前的日期属于第 0 周
- 与 $isoWeek 取值不同:$isoWeek 从周一开始且没有第 0 周
- 周与年份要配合,跨年周归属易混淆,可结合 $year 判断
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q为什么会出现 0?
A1 月 1 日到第一个周日之间的日期属于第 0 周。
Q和 $isoWeek 哪个更适合国际业务?
A国际业务用 $isoWeek,$week 是美式规则。
Q周数最大多少?
A0 到 53,与 $isoWeek 的 1 到 53 不同。