Mar*_*ill 11 php mongodb mongodb-php
我正在运行从mongodb获取数据的php脚本.我有一个非常庞大的数据库,我得到这个例外..我的mongodb版本是1.6.5
PHP Fatal error: Uncaught exception 'MongoCursorTimeoutException'
with message 'cursor timed out
(timeout: 30000, time left: 0:0, status: 0)
Run Code Online (Sandbox Code Playgroud)
我的查询是这样的
private function executeRegex($start_date, $end_date, $source, $collection, $db)
{
$criteria = array(
'date' => array(
'$gte' => new MongoDate(strtotime($start_date)),
'$lt' => new MongoDate(strtotime($end_date))
),
'uid'=> array(
'$ne' => '-',
),
'source' => new MongoRegex($source)
);
$value = $db->command(array('distinct' => $collection, 'key' => 'uid', 'query' => $criteria));
return count($value['values']);
}
Run Code Online (Sandbox Code Playgroud)
如何将超时设置为无限,以便我不会得到此异常
Gat*_* VP 12
这是用于设置游标超时的文档.
$cursor = $collection->find()->timeout(n);
Run Code Online (Sandbox Code Playgroud)
该command
方法不返回它返回数组的游标.
如果你看一下命令方法的文档,你会发现它实际上只是以下的包装器:
public function command($data) {
return $this->selectCollection('$cmd')->findOne($data);
}
Run Code Online (Sandbox Code Playgroud)
这应该让你朝着正确的方向前进.
PHP驱动程序支持命令方法中的第二个参数来设置超时.
这意味着您应该执行以下操作:
$value = $db->command(
array('distinct' => $collection, 'key' => 'uid', 'query' => $criteria),
array('timeout' => 10000000000)
);
Run Code Online (Sandbox Code Playgroud)
这应该可以解决你的问题!
归档时间: |
|
查看次数: |
22429 次 |
最近记录: |