- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个查询,它在一个庞大的集合(超过 48M)中查找数据,但即使我添加 timeout=-1
到它,它仍然会抛出 MongoCursorTimeoutException
异常(exception)..
return \DB::connection('mongodb')->collection('stats')->timeout(-1)
->where('ip','=',$alias)
->where('created_at','>=', new \DateTime( $date ) )
->where('created_at','<=', new \DateTime( $date . ' 23:59:59' ) )
->count();
我正在使用这个库:https://github.com/jenssegers/laravel-mongodb
有什么想法吗?
最佳答案
有一个问题PHP-1249 - MongoCursor::count() should use cursor's socket timeout为 PHP MongoDB 驱动程序 v1.5.7 提交,已于 2014 年 10 月在 v1.5.8 中修复。
reply来自支持:
Looking into the code a bit, it appears that both socket timeout and
maxTimeMS
is not passed along to thecount
command.If you need an immediate work-around, you should be able to get by with
MongoDB::command()
for now (which can support both timeouts).
其中一位用户发布的解决方法是:
$countComand = $mongo->command(
array(
'count' => 'collection',
'query' => $query
),
array('socketTimeoutMS' => -1)
);
if($countComand['ok']){
$count = $countComand['n'];
} else {
// ... error ...
}
看来laravel-mongodb不使用 MongoDB::command()
。您要么必须在没有 where
方法帮助的情况下显式编写查询,如上所示,要么升级到 v.1.5.8。
关于mongodb - jenssegers/laravel-mongodb 中的 MongoCursorTimeoutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31190504/
我正在运行从 mongodb 获取数据的 php 脚本。我有一个非常庞大的数据库,我得到了这个异常..我的 mongodb 版本是 1.6.5 PHP Fatal error: Uncaught e
我有一个查询,它在一个庞大的集合(超过 48M)中查找数据,但即使我添加 timeout=-1 到它,它仍然会抛出 MongoCursorTimeoutException异常(exception)..
我是一名优秀的程序员,十分优秀!