foreach循环和while循环之间的mongoDB游标区别

Posted

技术标签:

【中文标题】foreach循环和while循环之间的mongoDB游标区别【英文标题】:mongoDB cursor difference between foreach loop and while loop 【发布时间】:2016-07-08 21:54:02 【问题描述】:

我正在使用 mongoDB php,当我使用 find 查询或聚合框架时,结果是一个游标,我可以使用 foreach 循环或 while 循环遍历游标。例如我有以下查询要执行

$result = $collection->find();

我可以使用以下两种方法迭代结果

1- foreach($result as $mongoid => $doc) 
        echo "mongoid is " . $mongoid;
        print_r($doc);
    

2- while ( $result->hasNext() ) 
       $doc = $result->getNext();  
       $result->next();  
       print_r( $doc );
       echo "find one doc in cursor\n";

   

上述哪种迭代方法最好,为什么?

【问题讨论】:

【参考方案1】:

在这种情况下,使用 foreachwhile 没有任何显着差异。读取循环性能是相同的。使用foreach 使您的代码更具可读性。 您可以在The PHP Benchmark 上检查写入/读取循环性能。

【讨论】:

当我们只讨论foreach循环和while循环时,您可能会写,但是您必须考虑到这一点,当使用foreach循环时,不使用MongoDB Cursor方法,而是使用While循环迭代我使用了 MongoDB 游标方法,例如:-hasNext() 和 getNext()。代码仍然没有性能差异或任何其他差异吗? 我不确定(您必须对其进行基准测试),但我真的认为您示例中的 foreach 循环应该比 while 循环更快,因为它不使用游标方法,而只使用核心 php方法。

以上是关于foreach循环和while循环之间的mongoDB游标区别的主要内容,如果未能解决你的问题,请参考以下文章

php while循环和foreach循环 mysql_fetch_array()

foreach 循环内的 while 循环仅返回 1 行

Java的迭代和foreach循环

for循环与forEach循环的区别

在while循环中进行foreach

forEach函数中的while循环[重复]