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


MongoDB cursor in PHP, does it bring all records to the client upon query execution or one by one upon cursor iteration?

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

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

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

http://php.net/manual/en/mongocursor.batchsize.php

本页http://uk3.php.net/manual/en/class.mongocursor.php暗示是后者——游标对象不会一次性加载所有数据。然而,我看不出有任何选项可以让你"调整"它的速度。

它对我很有用……要了解更多信息,请查看此链接。

$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'];
}

感谢@AdamComerford