MongoDB聚合查询中秒级时间戳转日期异常问题排查
解决MongoDB聚合中秒级时间戳转日期的问题
你的猜测完全正确:MongoDB的$convert(以及$toDate)默认要求毫秒级时间戳,而你的数据是秒级格式,直接转换会把秒数当成毫秒数计算,最终得到1970年1月底的错误日期。
只需要在转换前通过$multiply将秒级时间戳乘以1000,转换成毫秒级格式即可。修正后的聚合管道如下:
[ {$match: {"source": "tomtom"}}, {$group: { "_id": "$date", "count": { "$sum": 1 } }}, {$project: { "_id": 0, "date": { $convert: { input: { $multiply: ["$_id", 1000] }, to: "date" } }, "count": 1 }}, {$sort: {date:1}} ]
也可以用更简洁的$toDate替代$convert,效果完全一致:
[ {$match: {"source": "tomtom"}}, {$group: { "_id": "$date", "count": { "$sum": 1 } }}, {$project: { "_id": 0, "date": { $toDate: { $multiply: ["$_id", 1000] } }, "count": 1 }}, {$sort: {date:1}} ]
内容的提问来源于stack exchange,提问作者Adrien Chapelet
相关产品推荐
相关产品推荐

