我有一个 mongodb,其中包含一个包含类似对象的集合
{
timestamp: <unix timestamp>,
sensor: <string>,
temperatore: number
}
完整的堆栈是
- 硬件:
- 树莓派3
- 后端:
- mongodb 2.4.16
- nodejs 6.8.1
- mongodn( Node 模块)2.2.11
- 前端
- Angularjs 1.5.8
- Highcharts 5
- highcharts-ng 0.0.13
在我的实际设置中,我每分钟都会有一个来自 3 个不同传感器的记录,因此每天有 4320 条记录。这对于绘制超过 1 天时间段的图表来说非常合适。
我想找到一种方法来减少记录数量,以便更快地绘制 1 周期间的图表,并且我不需要发送所有 32040 条记录。
我正在考虑每 10 分钟获取一个值(图表不太精确,但我不需要放大),在 Node 级别进行过滤,但当我想要绘制图表时,即 1 年(150 万条记录),它可能会变得很重。
所以我想就如何有效地做到这一点获得一些意见。可能是对 find()
调用进行了一些精心设计的过滤器,但除了迁移到传统数据库(PostgreSQL 或 Mariadb)之外,我想不出任何可行的方法。
最佳答案
解决方案可能是预先计算一小时/天的平均温度并将其保存在其他集合中。 例如,您可以有 3 个集合:
每日图表的所有记录(1 分钟间隔)的主要集合:显示 4320 点
小时集合存储每半小时的平均温度,周图:1008点显示
日采集存储每6小时的平均气温,全年图表:4380点显示
然后根据所需的精度查询特定的集合。
当然你的数据会有一点冗余,但是查询/显示会快得多
关于javascript - mongodb 日期时间过滤和聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40270043/