【发布时间】:2020-07-27 18:08:11
【问题描述】:
我将时间序列数据存储在 mongoDB 集合中,每 15 分钟有一个数据点。但有时,由于恶劣的条件,一些数据点会丢失。我有一个数据集如下:
{"device_id": "ABC","temp": 12,"timestamp": 2020-01-04T17:48:09.000+00:00}
{"device_id": "ABC","temp": 10,"timestamp": 2020-01-04T18:03:09.000+00:00}
{"device_id": "ABC","temp": 14,"timestamp": 2020-01-04T18:18:09.000+00:00}
missing frame
missing frame
{"device_id": "ABC","temp": 13,"timestamp": 2020-01-04T19:03:09.000+00:00}
{"device_id": "ABC","temp": 15,"timestamp": 2020-01-04T19:18:09.000+00:00}
missing frame
{"device_id": "ABC","temp": 10,"timestamp": 2020-01-04T19:48:09.000+00:00}
{"device_id": "ABC","temp": 11,"timestamp": 2020-01-04T20:03:09.000+00:00}
...
我不知道如何查询此集合,以便每 15 分钟获得一个连续的值列表,以便绘制它并显示丢失的消息(在丢失消息的情况下更改图表的背景颜色) .我希望每 15 分钟对齐一次结果(这会将 t 和 t+15min 之间的值相加),如下所示:
{"timestamp": 2020-01-04T17:45:00.000+00:00, "temp": 12, missing: false}
{"timestamp": 2020-01-04T18:00:00.000+00:00, "temp": 10, missing: false}
{"timestamp": 2020-01-04T18:15:00.000+00:00, "temp": 14, missing: false}
{"timestamp": 2020-01-04T18:30:00.000+00:00, "temp": 0, missing: true}
{"timestamp": 2020-01-04T18:45:00.000+00:00, "temp": 0, missing: true}
{"timestamp": 2020-01-04T19:00:00.000+00:00, "temp": 13, missing: false}
{"timestamp": 2020-01-04T19:15:00.000+00:00, "temp": 15, missing: false}
{"timestamp": 2020-01-04T19:30:00.000+00:00, "temp": 0, missing: true}
{"timestamp": 2020-01-04T19:45:00.000+00:00, "temp": 10, missing: false}
{"timestamp": 2020-01-04T20:00:00.000+00:00, "temp": 11, missing: false}
有什么想法吗?提前感谢您的帮助!
【问题讨论】:
-
您可以使用聚合查询来做到这一点。该查询可以输入开始和结束时间戳、时间间隔(即 15 分钟)并返回您发布的输出。时间戳可以转换为毫秒,对于给定的时间戳范围和时间间隔,可以得出所有可能的时间戳,并从可用数据中找到丢失的时间戳。
-
谢谢!是的,我知道该方法是进行聚合查询。但我不知道如何与时间戳上的条件相加,并在没有找到数据时放置一个特殊值。
-
我发布了我之前提到的答案。它给出了预期的结果。我可能会对查询进行一些改进(稍后更新帖子)。
标签: mongodb mongodb-query pymongo