所以我有一个db (MongoDB),每隔几分钟我就会在其中存储温度(它现在有超过20k个条目)。我想在我的网站(在Node.js/Express +Mongoose上运行)上显示一些关于这些数据的统计数据。
现在我想计算一些统计数据(avg,max,min,...)并在我的网站上展示。目前,我循环遍历前端(javascript)中的所有条目,这会减慢一切。
实现这一点的最佳方式是什么?
发布于 2019-02-26 10:57:59
通常,最好的方法是拥有一个预先聚合的文档。当您将新数据插入到“主”集合中时,此文档将同时更新。
使用您的示例,如果您只需要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>
}注意,为了能够计算新的平均值,您需要在上面的文档中使用sum和n字段。如果您担心原子性,则每次插入新数据时都要更新该文档,并使用新的MongoDB 4.0 transactions feature。
之后,查找最小值、最大值、平均值只需一个find()命令即可显示该文档的内容。
有关此想法的更复杂示例,请参阅Hierarchical Aggregation。
https://stackoverflow.com/questions/54873200
复制相似问题