【发布时间】:2019-12-24 15:24:03
【问题描述】:
我有物联网传感器,每秒不断发送事件,并将事件存储在 MongoDB 中,格式如下:
{
"_id" : "stp_23",
"HP" : [
1261.0,
1357.0,
1337.0,
1250.0,
1269.0,
1134.0,
1219.0,
1269.0,
1166.0,
1361.0,
1246.0,
... ]
"TS" : [
"2019-12-20T00:00:04.6440124Z",
"2019-12-20T00:00:14.6440124Z",
"2019-12-20T00:00:24.6440124Z",
"2019-12-20T00:00:34.6450042Z",
"2019-12-20T00:00:44.6450042Z",
"2019-12-20T00:00:54.6450042Z",
"2019-12-20T00:01:55.6460113Z",
"2019-12-20T00:02:05.6460113Z",
"2019-12-20T00:02:15.6460113Z",
"2019-12-20T00:02:35.6460113Z"
... ]
"_id" : "stp_24" : ....
}
我需要根据 TS 值每 5 分钟创建一次聚合。我已按照以下查询执行,因为 TS 是时间戳数组获取错误
$convert 中不支持从数组到日期的转换,没有 onError 值
db.hp_daily.aggregate([
{ "$group": {
"_id": {
"$toDate": {
"$subtract": [
{ "$toLong": { "$toDate": "$TS" } },
{ "$mod": [ { "$toLong": { "$toDate": "$TS" } }, 1000 * 60 * 5 ] }
]
}
},
"count": { "$sum": 1 }
}}
])
我正在寻找这样的结果:
[
{
"_id" : "stp_23",
"ts" : ISODate("2019-12-20T00:05:00.000Z"),
"avgHP" : 1200
},
{
"_id" : "stp_24",
"ts" : ISODate("2019-12-20T00:10:00.000Z"),
"avgHP" : 1350
}
]
【问题讨论】:
-
请在jsoneditor在线分享收藏
-
示例输入文档显示两个
_id字段。此外,您期望的输出显示id字段。目前尚不清楚_id、id和TS字段之间的关系。请解释清楚。 -
更新了 _id 字段
标签: mongodb mongodb-query aggregation-framework