【问题标题】:Cursors cannot yield multiple iterators mongodb error for PHP游标不能产生 PHP 的多个迭代器 mongodb 错误
【发布时间】:2019-02-19 06:54:59
【问题描述】:

我有一个应该根据查询返回的简单记录。一旦我尝试获得结果,我就会收到以下错误:

游标不能产生多个迭代器

我的代码很简单:

    $db = \core\databaseUtilities\getDbConnection();

    $filter = [ 'email' => $email ]; 
    $query = new \MongoDB\Driver\Query($filter);

    $res = $db->executeQuery($db->dbName.".users", $query);
    $records = $res->toArray();

在最后一行失败。

我在网上找到了一些关于如何查询的代码示例,它们看起来都差不多。这是我使用的参考:http://php.net/manual/en/class.mongodb-driver-cursor.php

【问题讨论】:

    标签: php mongodb mongodb-query


    【解决方案1】:

    您可以按照 MongoCursor 文档的 example 中的建议使用 PHP 的 iterator_to_array 函数:

    $res = $db->executeQuery($db->dbName.".users", $query);
    $records = iterator_to_array($res);
    

    【讨论】:

    • 谢谢。请参阅我的另一个答案,该问题是由监视 $res->toArray(); 引起的。调试和观看时的问题原因。
    • 即使没有 Watch 集,我也遇到了“游标无法产生多个迭代器”异常,上述答案为我解决了这个问题。谢谢!
    【解决方案2】:

    我发现了这个问题,它与代码无关。我正在发布答案,因为其他人可能会遇到同样的问题。它与我的 IDE Visual Studio 代码有关。但是,我认为这可能不限于我的 IDE。问题是我在 $res->toArray();因此,当代码转到我示例中的最后一行时,它正在尝试再次迭代。取下手表后,我的问题就消失了,无需更改代码。

    【讨论】:

      猜你喜欢
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      • 2016-01-30
      相关资源
      最近更新 更多