Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDb游标上的游标超时错误_Mongodb - Fatal编程技术网

MongoDb游标上的游标超时错误

MongoDb游标上的游标超时错误,mongodb,Mongodb,我刚刚开始使用mongoDb作为我的PHP后端 我只是使用find()查询来满足我的一个需求。我只想要前100个结果,但也想要得到全部可用结果。我正在尝试这个 $cursor = $this->dbReference->dbName->find($query); if($count != 0) { $cursor->skip($startIndex); $cursor->limit($count

我刚刚开始使用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()获取可用结果行的总数。 这一行错误显示“光标超时”。有谁能告诉我有什么问题吗?或者,查找搜索结果总数的替代方法是什么


提前谢谢。

我刚刚用10万个简单文档尝试了一下<无论是否设置了
$count
$startIndex
,我的code>$totalCount始终为100000(这是正确的行为)<代码>$entries包含所有100000个条目。在我的本地设置中,整个操作大约需要3秒钟

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


你的文件有多大?数据量可能会影响速度。

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


我发现->count()也会耗尽执行时间,直到超时为止。对我来说更好的方法是只使用find(),然后使用foreach循环将光标中所需的项放入数组中。 然后在该数组上执行数组\u count\u values()。看起来也快了一点

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


神奇的是,没有更可怕的超时消息。

@danielwood是的,我使用的是远程数据库,但它也在本地网络(Intranet)上。问题可能是因为$cursor->count();$cursor->count()也会增加执行时间。如果我没有使用$cursor->count(),它的运行速度就像你说的那样快。新版本的mongodb解决了这个问题,并且不推荐使用laravel和nodejs'MongoCursor::$timeout'静态属性
MongoCursor::$timeout = -1;
$cursor = $this->dbReference->dbName->find($query);