【问题标题】:Does sort() of MongoDB run in O(1) time?MongoDB 的 sort() 是否在 O(1) 时间内运行?
【发布时间】:2019-04-03 11:08:46
【问题描述】:

我一直在寻找如何从 MongoDB 集合中获取最大值的方法,我发现大多数人推荐 to sort first, and then get the first one from the result。

一般来说,排序需要 O(NlogN) 时间,但如果我要排序的字段已经被索引,它应该花费更少的时间。

所以我的问题是,

  1. 正如我在标题中所写,MongoDB 的 sort() 是否在 O(1) 时间内运行?
  2. 如果没有,MongoDB 是否提供了一种更快的方法来获取最大值?

【问题讨论】:

  • 从索引字段中获取最大值(没有任何其他条件)确实是 O(1)。由于索引已经排序,您可以从中获取第一个条目。 stackoverflow.com/a/40163474/14955

标签: mongodb indexing time-complexity


【解决方案1】:

正如我在标题中所写,MongoDB 的 sort() 运行时间是 O(1) 吗?

没有,MongoDB Documentation 也没有提到它。

如果没有,MongoDB 是否提供了一种更快的方法来获取最大值?

不,虽然还有另一种使用聚合管道的方法,即使用$max,但它的性能不如$sort + $limit。引用文档

$sort + $limit 内存优化:

当 $sort 在 $limit 之前并且 没有修改文档数量的干预阶段, 优化器可以将 $limit 合并到 $sort 中。这允许 $sort 操作仅在进行时维护前 n 个结果, 其中 n 是指定的限制,并确保 MongoDB 只需要 在内存中存储 n 个项目。

【讨论】:

  • 感谢您对文档链接的详细解释,但我仍有疑问。如果聚合算子是sort(),不是$sort,是不是可以利用索引?
猜你喜欢
  • 2018-05-28
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多