Node.js 在MongoDB中查找具有非典型限制的文档
我有个问题,但不知道如何解决。 我在MongoDB中有PointValues集合。 PointValue架构有3个参数:Node.js 在MongoDB中查找具有非典型限制的文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有个问题,但不知道如何解决。 我在MongoDB中有PointValues集合。 PointValue架构有3个参数: 数据点(参考dataPointschema) 值(编号) 时间(日期) 每小时有一个pointValue(每天24个) 我有API方法来获取指定的DataPoint和时间范围的点值。问题是我需要限制它最大1000点。典型的极限(1000)方法不是好方法,因为我需要整个指定时间范围的点,时间步长取决于指定的时间范围和点值计数 所以。。。例如: 1年的申请数据=1*365*2
- 数据点(参考
schema)dataPoint
- 值(
)编号
- 时间(
)日期
DataPoint
和时间范围的点值。问题是我需要限制它最大1000点。典型的极限(1000)方法不是好方法,因为我需要整个指定时间范围的点,时间步长取决于指定的时间范围和点值计数
所以。。。例如:
1年的申请数据=1*365*24=8760
它应该返回1000个值,但大约每(24/(1000/365))9小时返回一个值
我不知道应该用什么方法过滤MongoDB中的数据
谢谢您的帮助。在数据库中进行完全相同的采样将非常困难,而且性能可能不太好。但是给你一个类似结果的选项是使用一个聚合管道,这是最重要的。这样,您可以按时间步长对值进行采样,但步长的选择仅限于日期运算符的范围。因此,“每小时”样本很容易,但“每9小时”样本变得复杂。当这个查询是关键的和频繁的时,您可能需要考虑以每天、每小时、分钟等方式创建额外的集合:代码>数据表> /代码> S,因此您不必在每个请求上执行该聚合。p>
但是您的文档非常轻量级,因为实际负载位于不同的集合中。因此,您可以考虑将所有结果都在所请求的时间范围内,然后在应用层上跳过。您可能需要考虑将其与上述聚合相结合,以预先减少数据集。因此,您可以首先使用聚合管道将每小时的结果输入到应用程序中,然后以9个文档的步骤跳过结果集。这是否合理取决于您期望的文档数量
还要记住在时间
-字段上创建一个排序索引