MongoDB数据库统计

时间:2019-02-25 19:15:46

标签: node.js mongodb mongoose

因此,我有一个数据库(MongoDB),每隔几分钟我就会在其中存储温度(现在有超过2万个条目)。我想在我的网站上显示有关此数据的一些统计信息(在Node.js / Express + Mongoose上运行)。

现在,我想计算一些统计信息(平均,最大值,最小值,...)并将其显示在我的网站上。目前,我循环浏览前端(javascript)中的所有条目,这会减慢一切。

实现此目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

通常,最好的方法是拥有一个预先汇总的文档。在将新数据插入“主”集合中的同时,将同时更新该文档。

以您的示例为例,如果只需要avg,max和min,则可以创建如下文档:

{
  max: <max value seen so far>,
  min: <min value seen so far>,
  avg: <avg value seen so far>,
  sum: <total value seen so far>,
  n: <number of data points seen so far>
}

请注意,要能够计算新的平均值,您将需要上面文档中的sumn字段。每次插入新数据时,如果您担心原子性问题,请使用新的MongoDB 4.0 transactions feature来更新此文档。

此后,查找最小值,最大值,平均值仅是一个find()命令,用于显示此文档的内容。

有关此想法的更复杂示例,请参见Hierarchical Aggregation