gpt4 book ai didi

javascript - 将日期从毫秒转换为 ISODate 对象

转载 作者:IT老高 更新时间:2023-10-28 13:04:57 25 4
gpt4 key购买 nike

我正在尝试按小时聚合 MongoDB 集合中的记录,并且需要将存储为时间戳(毫秒)的日期转换为 ISODate,以便我可以使用聚合框架的内置日期运算符($hour、$month 等)

记录存储为

{ 
"data" : { "UserId" : "abc", "ProjId" : "xyz"},
"time" : NumberLong("1395140780706"),
"_id" : ObjectId("532828ac338ed9c33aa8eca7")
}

我正在尝试使用以下类型的聚合查询:

db.events.aggregate(
{
$match : {
"time" : { $gte : 1395186209804, $lte : 1395192902825 }
}
},
{
$project : {
_id : "$_id",
dt : {$concat : (Date("$time")).toString()} // need to project as ISODate
}
},
// process records further in $project or $group clause
)

产生以下形式的结果:

{
"result" : [
{
"_id" : ObjectId("5328da21fd207d9c3567d3ec"),
"dt" : "Fri Mar 21 2014 17:35:46 GMT-0400 (EDT)"
},
{
"_id" : ObjectId("5328da21fd207d9c3567d3ed"),
"dt" : "Fri Mar 21 2014 17:35:46 GMT-0400 (EDT)"
},
...
}

我想从日期中提取小时、日、月和年,但由于时间被预测为字符串,我无法使用聚合框架的内置日期运算符($hour 等)。

如何将时间从毫秒转换为 ISO 日期,以执行以下操作:

db.events.aggregate(
{
$match : {
"time" : { $gte : 1395186209804, $lte : 1395192902825 }
}
},
{
$project : {
_id : "$_id",
dt : <ISO date from "$time">
}
},
{
$project : {
_id : "$_id",
date : {
hour : {$hour : "$dt"}
}
}
}
)

最佳答案

实际上,有可能,诀窍是使用类似于以下的语法将毫秒时间添加到零毫秒 Date() 对象:

dt : {$add: [new Date(0), "$time"]}

我从上面修改了您的聚合以产生结果:

db.events.aggregate(
{
$project : {
_id : "$_id",
dt : {$add: [new Date(0), "$time"]}
}
},
{
$project : {
_id : "$_id",
date : {
hour : {$hour : "$dt"}
}
}
}
);

结果是(带有您的样本数据的一项):

{
"result": [
{
"_id": ObjectId("532828ac338ed9c33aa8eca7"),
"date": {
"hour": 11
}
}
],
"ok": 1
}

关于javascript - 将日期从毫秒转换为 ISODate 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22698265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com