首页 文章

评估MongoDB聚合查询复杂性:$ lookup的成本

提问于
浏览
2

我正在评估我的算法的计算成本涉及一些MongoDB聚合查询,所以我试图弄清楚我使用的各种运算符的成本,然后整个查询的成本将只是所有这些的总和因为它们是级联应用的 .

我说,$ project,$ match和$ unwind的成本是O(n),n是集合中的文档数,因为我没有任何索引所以我需要扫描所有文档 .

现在我的问题是:新的$ lookup运算符的成本怎么样?它在两个集合上执行左连接,所以我首先猜测它有点计算两个集合的笛卡尔积,因此成本应该是O(n * m),其中m是第二个集合的大小 . 我对吗? MongoDB是否更有效率?你对这个话题有什么参考吗?

1 回答

  • 2

    $lookup实际上是针对引用集合的 $in 查询,其中 $in 的值是从管道到查找的 localField 值的集合 .

    如果 foreignField 已编入索引,则该查询的复杂性为O(log(n)) . 如果 foreignField isn 't indexed, the query'的复杂度为O(n) .

相关问题