$toDate(转日期)
最后更新:2026-10-09
$toDate(转日期)
$toDate 把值转换为日期(BSON Date)。支持日期直接透传、数字时间戳(毫秒)、ISO 8601 格式字符串。典型场景包括把日志里的时间字符串转为日期以便按天分组、把前端传来的毫秒时间戳标准化。非法字符串会报错,建议用 $convert onError 兜底。null 输入返回 null。与 $dateFromString 的区别是 $toDate 语法更简、自动识别 ISO 格式。
| 分类 | 集合·条件·转换 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $toDate: <表达式> }
⚙️ 参数
| 表达式 | 日期、数字时间戳(毫秒)或 ISO 字符串。 |
|---|
返回值:Date 类型;输入为 null 时返回 null
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $toDate:把时间字符串转成日期
db.logs.aggregate([
{ $project: {
ts: { $toDate: '$timeStr' }
} }
])
运行结果:
{ '_id': 1, 'ts': { '$date': '2026-09-25T08:00:00Z' } }
📌 注意事项
- 数字按毫秒时间戳解释,秒级时间戳需先乘 1000
- 非 ISO 格式字符串(如 '2026/09/25')会报错
- null 输入返回 null
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q能解析哪些字符串?
AISO 8601 格式,如 '2026-09-25T08:00:00Z'。
Q时间戳是秒级怎么处理?
A先 { $multiply: ['$ts', 1000] } 转成毫秒再转换。
Q和 $dateFromString 的区别?
A$toDate 自动识别 ISO 格式,$dateFromString 可自定义 format 和时区。