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