【发布时间】:2019-02-04 19:34:26
【问题描述】:
我正在寻找一种方法来返回存储在 MongoDB 中的不同分辨率的数据。我能想到的最优雅的解决方案是从集合中返回每个“第 n 个”(第二个、第三个、第十个等)文档的查询。
我以 5 秒的间隔存储数据(比如温度),但想查看数据中的不同趋势。
为了找到瞬时趋势,我查看了最后 720 个条目(1 小时)。这部分很简单。
如果我想查看稍微长一点的趋势,比如 3 小时,我可以检索最后 2160 个条目(3 小时),但是从服务器中提取的时间更多,绘制的时间和内存也更多。在查看更大的趋势时,小动作是噪音,我最好检索相同数量的文档(720),但每 3 次检索一次,仍然给我 3 小时的结果,使用相同的资源,对于未成年人牺牲细节。
当我想查看几周(120,960 个文档)或几个月(500,000+ 个文档)时,这只会变得更加极端。
我当前的代码收集每个文档(n = 1):
db.collection(collection).find().sort({$natural:-1}).limit(limit)
然后我可以遍历返回的数组并在以下情况下删除每个文档:
index % n != 0
这至少使客户端免于处理所有数据,但这似乎效率极低,我宁愿数据库处理这部分。
有谁知道实现这个的方法吗?
【问题讨论】: