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

car*_*t91 3 algorithm join mongodb aggregation-framework

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

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

现在我的问题是:新的 $lookup 运算符的成本如何?它对两个集合执行左连接,所以我首先猜测它有点计算两个集合的笛卡尔积,因此成本应该类似于 O(n * m),其中 m 是第二个集合的大小。我对吗?MongoDB 做一些更有效的事情吗?你有关于这个主题的任何参考吗?

Joh*_*yHK 9

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

如果foreignField被索引,则该查询的复杂度为 O(log(n))。如果foreignField未编入索引,则查询的复杂度为 O(n)。