我刚开始使用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()来获取可用结果行的总数。 在这一行错误显示“光标超时”。请问有谁能告诉我这个问题是什么?或者找到搜索结果总数的替代方法。
提前致谢。
答案 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,我认为这对我的情况也很有帮助。
可悲的是,没有更多可怕的超时消息。