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

时间:2012-02-21 12:19:05

标签: php optimization mongodb cursor

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

3 个答案:

答案 0 :(得分:3)

PHP驱动程序(以及我遇到的任何其他驱动程序)将根据批处理大小获取结果。如果你在JS shell中运行一个直接查找查询,你也会看到这个,它会在返回的前20个结果的末尾说“有更多”。调用iterate(it)函数将加载下一批等。

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

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

答案 1 :(得分:2)

此页面http://uk3.php.net/manual/en/class.mongocursor.php暗示它是后者 - 游标对象不会一次加载所有数据。但是,我看不到任何允许你“调整”它的速率的选项。

答案 2 :(得分:0)

这对我有用..为了更多的理解,请查看link

$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