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

时间:2015-12-06 15:59:42

标签: algorithm mongodb join aggregation-framework

我正在评估我的算法的计算成本涉及一些MongoDB聚合查询,因此我试图弄清楚我使用的各种运算符的成本,那么整个查询的成本将只是所有这些都是在级联中应用的。

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

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

1 个答案:

答案 0 :(得分:2)

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

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