我正在评估我的算法的计算成本涉及一些MongoDB聚合查询,因此我试图弄清楚我使用的各种运算符的成本,那么整个查询的成本将只是所有这些都是在级联中应用的。
我上前说$ project,$ match和$ unwind的成本是O(n),n是集合中的文档数,因为我没有任何索引所以我需要扫描所有文件。
现在我的问题是:新的$ lookup运算符的成本怎么样?它在两个集合上执行左连接,所以我首先猜测它有点计算两个集合的笛卡尔积,因此成本应该是O(n * m),其中m是第二个集合的大小。我对吗? MongoDB是否更有效率?你有关于这个主题的任何参考吗?
答案 0 :(得分:2)
$lookup
实际上是针对引用集合的$in
查询,其中$in
的值是从管道到查找的localField
值的集合。
如果foreignField
已编入索引,则该查询的复杂性为O(log(n))。如果foreignField
未编入索引,则查询的复杂性为O(n)。