Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 评估MongoDB聚合查询复杂性:查找$lookup的成本_Algorithm_Mongodb_Join_Aggregation Framework - Fatal编程技术网

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

Algorithm 评估MongoDB聚合查询复杂性:查找$lookup的成本,algorithm,mongodb,join,aggregation-framework,Algorithm,Mongodb,Join,Aggregation Framework,我正在评估我的算法的计算成本,该算法涉及一些MongoDB聚合查询,因此我试图计算出我使用的各种操作符的成本,然后整个查询的成本将是所有操作符的总和,因为它们在级联中应用 我说$project、$match和$unwind的成本是O(n),n是集合中的文档数,因为我没有任何索引,所以我需要扫描所有文档 现在我的问题是:新的$lookup操作符的成本是多少?它对两个集合执行左连接,所以我的第一个猜测是它计算了两个集合的笛卡尔积,因此成本应该类似于O(n*m),其中m是第二个集合的大小。我说得对吗?

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

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

现在我的问题是:新的$lookup操作符的成本是多少?它对两个集合执行左连接,所以我的第一个猜测是它计算了两个集合的笛卡尔积,因此成本应该类似于O(n*m),其中m是第二个集合的大小。我说得对吗?MongoDB是否做了更有效的事情?您对此主题有任何参考吗?

实际上是对所引用集合的
$in
查询,其中
$in
的值是从管道到查找的
本地字段
值的集合


如果对
foreignField
进行了索引,则该查询的复杂性为O(log(n))。如果未对
foreignField
进行索引,则查询的复杂度为O(n)。

在我的示例中,foreignField未进行索引,因此它是O(n)wrt本地集合。。但是外国收藏品呢?我们不应该也考虑它的大小吗?它和国外的收藏品不一样。可以将查询看作是在整个外部集合中循环,并对每个文档进行检查,以确定其中一个查找是否需要它。啊!!好啊哇,我还以为会有更糟糕的表现呢!谢谢!!:):)