Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.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
在PHP中,MongoDB游标是在执行查询时将所有记录带到客户端,还是在游标迭代时逐个带到客户端?_Php_Optimization_Mongodb_Cursor - Fatal编程技术网

在PHP中,MongoDB游标是在执行查询时将所有记录带到客户端,还是在游标迭代时逐个带到客户端?

在PHP中,MongoDB游标是在执行查询时将所有记录带到客户端,还是在游标迭代时逐个带到客户端?,php,optimization,mongodb,cursor,Php,Optimization,Mongodb,Cursor,我想用MongoDB优化我的查询,我想知道PHP客户端协议如何处理从find()查询返回的游标,它是否会将大量结果带到客户端,或者一次从远程数据库获取一条记录并将其返回到应用程序?此页面提示它是后者-游标对象不会一次性加载所有数据。但是,我看不到任何选项允许您“调整”其执行速度。PHP驱动程序(以及我遇到的任何其他驱动程序)将根据批量大小获取结果。如果在JS shell中运行直接查找查询,也可以看到这一点,它会在返回的前20个结果末尾显示类似“has more”的内容。调用iterate(it)

我想用MongoDB优化我的查询,我想知道PHP客户端协议如何处理从find()查询返回的游标,它是否会将大量结果带到客户端,或者一次从远程数据库获取一条记录并将其返回到应用程序?

此页面提示它是后者-游标对象不会一次性加载所有数据。但是,我看不到任何选项允许您“调整”其执行速度。

PHP驱动程序(以及我遇到的任何其他驱动程序)将根据批量大小获取结果。如果在JS shell中运行直接查找查询,也可以看到这一点,它会在返回的前20个结果末尾显示类似“has more”的内容。调用iterate(it)函数将加载下一批等

在PHP中,批量大小是可配置的,最多可达到总返回数据大小的限制以及关于限制等的一些其他注意事项,如下所述:


它对我有用。。要了解更多信息,请查看此项


感谢@AdamComerford

我正在考虑对查询使用Limit,这样,即使它确实向客户端获取数据,它也是有限的,但是,如果它一个接一个地获取记录,Limit可能没有用,我本以为它会缓冲结果,这样,而不是一次获取一个文档,它将一次完成几次,以填充缓冲区,并在处理缓冲区后获取更多。所以你应该没事。
$criteria = array( 'geo.loc' => array('$exists' => 1) );

$total    = $collection->count($criteria);

$response = $collection->find($criteria)->limit($total)->batchSize(100);

foreach($response as $value){
  $name = $value['name'];
}