MongoDB查找游标与toArray迭代和数字请求



我在php上使用MongoDB。 当我进行查找时,会返回MongoDB\Driver\Cursor。

迭代检索到的数据的更好方法是什么?

foreach($cursor as $entry){}

foreach($cursor->toArray() as $entry){}

每种方法向服务器发送了多少个请求? 如果有多个,有没有办法用一个请求检索所有数据?

提前谢谢。

MongoDB 会在您开始迭代光标后立即批量返回文档(默认批大小为 101(。在第一次迭代时,调用命中服务器以获取第一批中的文档,驱动程序将这些文档存储在本地。在后续迭代中,驱动程序从本地提供文档,直到迭代达到批大小。因此,在第 102 次迭代中,驱动程序再次向服务器发送调用以获取下一批,依此类推。

您可以通过find方法中提供可选参数batchSize来设置批大小,可在此处找到更多帮助

方法1:

foreach($cursor as $entry){}

方法2:

foreach($cursor->toArray() as $entry){}

$cursor->toArray以这样一种方式实现的,即它迭代游标并在数组中返回其结果。因此,当您使用这些方法中的任何一种时,对服务器的调用次数相同。唯一的区别是,您将使用方法 2获得单个结果集数组。

使用方法 2的缺点:

  • 结果集迭代了两次,一次在方法中toArray一次,一次在从数组中获取条目时。
  • 如果结果集中有大量文档,则可能会出现内存问题(内存不足(。

回答您的问题

方法 1会更好实现,如果要在游标迭代期间最小化对服务器的调用次数,只需显式设置batchSize(通过在方法中提供可选参数batchSizefind(。

最新更新