Kla*_*aus 1 php mongodb python-requests
我在 php 上使用 MongoDB。当我进行查找时,会返回 MongoDB\Driver\Cursor。
迭代检索到的数据的更好方法是什么?
foreach($cursor as $entry){}
Run Code Online (Sandbox Code Playgroud)
或者
foreach($cursor->toArray() as $entry){}
Run Code Online (Sandbox Code Playgroud)
每种方法向服务器发送了多少个请求?如果不止一个,是否有一种方法可以通过一个请求检索所有数据?
提前致谢。
一旦开始迭代游标,MongoDB 就会批量返回文档(默认批量大小为 101)。在第一次迭代中,调用服务器以获取第一批中的文档,并且驱动程序将这些文档存储在本地。在后续迭代中,驱动程序从本地提供文档,直到迭代达到批量大小。因此,在第 102 次迭代时,驱动程序再次向服务器发送调用以获取下一批,依此类推。
您可以通过batchSize在方法中提供可选参数来设置批量大小,可以在此处find找到更多帮助
方法一:
foreach($cursor as $entry){}
Run Code Online (Sandbox Code Playgroud)
方法2:
foreach($cursor->toArray() as $entry){}
Run Code Online (Sandbox Code Playgroud)
$cursor->toArray以迭代游标并将其结果返回到数组的方式实现。因此,当您使用这些方法中的任何一种时,对服务器进行的调用次数相同。唯一的区别是使用方法 2将获得单个结果集数组。
使用方法 2的缺点:
toArray方法中,一次在从数组获取条目时。回答你的问题:
如果您想在游标迭代期间最大程度地减少对服务器的调用次数,只需显式设置(通过在方法中batchSize提供可选参数),方法 1会更好地实现。batchSizefind