在MongoDB中查找非典型限制的文档

我有一个问题,但不知道如何解决它。 我在MongoDB中有PointValues集合。 PointValue模式有3个参数:

  • dataPoint(参考DataPoint模式)
  • 价值( Number
  • 时间( Date

每个小时有一个点 (每天24个)。

我有API方法来获取PointValues指定的DataPoint和时间范围。 问题是我需要限制它最多1000点。 典型的极限(1000)方法是不好的方法,因为我需要整点,指定的时间范围,时间步长取决于指定的时间范围和点数值。

所以…例如:

申请数据为1年= 1 * 365 * 24 = 8760它应该返回1000个值,但大约每个值(24 /(1000/365))= 9小时

我不知道我应该用什么方法来过滤MongoDB中的数据。

感谢帮助。

与数据库中的取样完全相同的做法很难做到,可能不是很高效。 但是一个给你类似结果的选项是使用一个聚合pipe道, $group$year$dayOfYear$hour$first最佳值 (如果需要更小的间隔,则$minute$second ) 。 这样,您可以按时间步骤对值进行采样,但是步长的select仅限于date操作符。 所以“小时”样品很容易,但“9小时”样品变得复杂。 当这个查询是性能关键和频繁的时候,你可能要考虑创build额外的集合,每天,每小时,每分钟等DataPoint所以你不需要执行每个请求的聚合。

但是由于实际有效负载位于不同的集合中,因此您的文档相当轻量级。 因此,您可能会考虑在所需的时间范围内获得所有结果,然后在应用程序层上执行跳过操作。 您可能要考虑将其与上述聚合相结合以预先减less数据集。 因此,您可以首先使用聚合pipe道将小时结果存入应用程序,然后跳过9个文档步骤中的结果集。 这是否合理取决于您期望的文档数量。

还要记住在time上创build一个sorting的索引。