MongoDB中如何将毫秒值转换为HH:MM:SS格式?
MongoDB中将毫秒值转换为HH:MM:SS格式的方法
可以通过MongoDB的聚合管道实现毫秒到HH:MM:SS格式的转换,以下是针对你提供的示例数据的具体实现:
示例数据
{ "Item":"Test1", "millisecond" : 188760000 }, { "Item":"Test2", "millisecond" : 23280000 }, { "Item":"Test3", "millisecond" : 128820000 }
聚合查询代码
db.collection.aggregate([ // 计算总秒数和扣除整小时后的剩余毫秒 { $addFields: { totalSeconds: { $divide: ["$millisecond", 1000] }, remainingMsAfterHours: { $mod: ["$millisecond", 3600000] } } }, // 拆分出小时、分钟、秒的数值 { $addFields: { hours: { $floor: { $divide: ["$totalSeconds", 3600] } }, minutes: { $floor: { $divide: ["$remainingMsAfterHours", 60000] } }, seconds: { $floor: { $divide: [{ $mod: ["$remainingMsAfterHours", 60000] }, 1000] } } } }, // 拼接成HH:MM:SS格式,分钟和秒补零到两位 { $addFields: { hrFormat: { $concat: [ { $toString: "$hours" }, ":", { $lpad: [{ $toString: "$minutes" }, 2, "0"] }, ":", { $lpad: [{ $toString: "$seconds" }, 2, "0"] } ] } } }, // 选择需要保留的字段(如需保留原millisecond字段,可添加"millisecond":1) { $project: { Item: 1, hrFormat: 1 } } ])
代码说明
- 计算基础数值:先将毫秒转换为总秒数,同时算出扣除整小时后的剩余毫秒,为后续拆分分钟和秒做准备。
- 拆分时间单位:
- 小时:总秒数除以3600并向下取整,支持超过24小时的场景
- 分钟:剩余毫秒除以60000并向下取整,得到完整的分钟数
- 秒:剩余毫秒对60000取模后再除以1000并向下取整,得到秒数
- 格式化拼接:用
$concat将小时、分钟、秒拼接成指定格式,同时用$lpad确保分钟和秒为两位数字(如6分钟显示为06)。 - 字段筛选:通过
$project只保留需要的字段,避免冗余数据。
输出结果
执行上述查询后,会得到如下格式的结果:
{ "Item":"Test1", "hrFormat" : "52:26:00" }, { "Item":"Test2", "hrFormat" : "06:28:00" }, { "Item":"Test3", "hrFormat" : "35:47:00" }
(注:Test1的计算结果为52:26:00,与你提供的示例输出62:22:00存在差异,推测是示例数据或期望输出的数值有误,上述代码逻辑为标准的毫秒转时间格式计算)
内容的提问来源于stack exchange,提问作者Jayven Javier
相关产品推荐
相关产品推荐

