如何解决MongoDB - 使用 MongoDB Compass 将 unix 时间转换为日期时间
我们如何将 MongoDB 中的 unix 时间戳从 1619463804.069353 转换为 2021 年 4 月 29 日星期四下午 4:55
我尝试使用以下功能,但不起作用。
db.collectionname.find().forEach(function(doc){
doc['timestamp']=new Date(doc['timestamp']);
db.collectionname.save(doc);})
另外,如果时间戳字段在数组对象中,是否可以使用类似的函数?
{
_id: 1,events: [
{
event: 1,timestamp: '1619463804.069353',},{
event: 2,timestamp: '1649463804.069353',{ ... },]
}
解决方法
对于 Mongo 4.0+ 版,您可以使用 $toDate 将其转换为日期对象, 因为 Unix 时间戳记录了您必须将其乘以 1000 的秒数,因为 Mongo 使用经过的毫秒数。
db.collection.aggregate([
{
$addFields: {
events: {
$map: {
input: "$events",as: "event",in: {
"$mergeObjects": [
"$$event",{
timestamp: {
"$toDate": {
$multiply: [
{
"$toDecimal": "$$event.timestamp",},1000
]
}
}
}
]
}
}
}
}
}
])
对于较小的 Mongo 版本,您必须将文档加载到内存中并在代码中执行。
如果您想更新整个集合,您可以使用带有 pipelined updates 功能的相同管道,从 Mongo v4.2 开始可用,如下所示:
db.collection.updateMany(
{},[
{
$addFields: {
events: {
$map: {
input: "$events",1000
]
}
}
}
]
}
}
}
}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。