游标在MongoDb游标上超时错误

时间:2010-08-23 05:44:06

标签: mongodb

我刚开始使用mongoDb作为PHP的后端。

我只是使用find()查询来满足我的一个需求。我只想要前100个结果,但也想获得总体可用结果。我正在尝试这个。

    $cursor = $this->dbReference->dbName->find($query);
    if($count != 0)
    {
            $cursor->skip($startIndex);
            $cursor->limit($count);
    }
    $totalCount = $cursor->count();

    $entries = array();
    while ($cursor->hasNext())
    {
            $cursor->next();
            $entry = $cursor->current();
            array_push($entries , $entry);
    }

现在的问题是...... T. 他的搜索结果包含超过50K的结果。但我一次只检索100个。 我使用$ cursor-> count()来获取可用结果行的总数。 在这一行错误显示“光标超时”。请问有谁能告诉我这个问题是什么?或者找到搜索结果总数的替代方法。

提前致谢。

3 个答案:

答案 0 :(得分:7)

您可以通过在find()之前添加此代码来解决游标超时问题:

MongoCursor::$timeout = -1;
$cursor = $this->dbReference->dbName->find($query);

答案 1 :(得分:1)

我刚刚尝试了100,000个简单文档。对我来说$totalCount总是100000,无论是$count还是$startIndex都设置了(这是正确的行为)。 $entries包含所有100000个条目。我的本地设置整个操作大约需要3秒钟。

您使用的是远程数据库吗?网络可能导致超时,而不是MongoDB。

您的文件尺寸是多少?数据量会影响速度。

答案 2 :(得分:0)

我发现 - > count()也会耗尽执行时间,直到超时为止。对我来说更好的是只使用find()然后使用foreach循环将光标中的所需项放入数组中。 之后在该数组上执行array_count_values()。似乎也有点快。

感谢MongoCursor :: $ timeout = -1,我认为这对我的情况也很有帮助。

可悲的是,没有更多可怕的超时消息。