javascript - mongodb 日期时间过滤和聚合

标签 javascript node.js mongodb highcharts timestamp

我有一个 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. 每日图表的所有记录(1 分钟间隔)的主要集合:显示 4320 点

  2. 小时集合存储每半小时的平均温度,周图:1008点显示

  3. 日采集存储每6小时的平均气温,全年图表:4380点显示

然后根据所需的精度查询特定的集合。

当然你的数据会有一点冗余,但是查询/显示会快得多

关于javascript - mongodb 日期时间过滤和聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40270043/

相关文章:

javascript - 为什么函数有时返回0有时返回false?

javascript - 在 DerbyJS 中使用从 MongoDB 导入的文档

javascript - 实现 css - 更改 toast 对话框的位置

node.js - 未知错误 : SyntaxError: Unexpected token 'export' on ng command

javascript - 在 textarea 值更改上启用按钮

css - 我的 CSS 不适用于我通过 zappa\express\node.js 呈现的应用程序

mongodb - 计算 _id 在其他集合中的出现次数

javascript - 点运算符不获取 Mongoose 文档对象的子属性

javascript - html 需要不与 onclick 一起工作

javascript - 有没有办法减去 toShortString() 返回的值?