集合函数的MongoCursorTimeoutException

时间:2013-11-15 08:32:46

标签: php mongodb

我正在尝试使用聚合函数从Mongo集合中获取一些数据,但它给了我MongoCursorTimeoutException。我试图一次只选择50个记录,该集合有超过17M的记录。这是从PHP完成的,我的代码如下:

$data = $my_collection->aggregate(array(
                                   array('$match'=>$filter_query),
                                   array('$group'=>array('_id'=>'$email')), 
                                   array('$skip'=>$offset),    
                                   array('$limit'=>$per_page)
                                 ));

和$ filter_query是另一个包含timestmap的数组,它就像

Array
(
    [timestamp] => Array
        (
            [$gt] => 1383890400
            [$lt] => 1384495200
        )

)

我不确定为什么会这样,因为我只想获取50条记录。我认为在选择所有记录之后执行agrression并且它导致错误。除了侵略之外,还有什么比这更好的方法吗?

我可以将超时设置为-1,但这是一个不错的选择,因为驱动程序将永远等待获得初始响应?

1 个答案:

答案 0 :(得分:5)

要为聚合函数设置超时选项,您应该使用MongoDB对象实例的command函数。例如:

$result = $database->command(
array(
    'aggregate' => $my_collection,
    'pipeline' => array(
        array('$match' => $filter_query),
        array('$group' => array('_id'=>'$email')),
                    array('$skip'=>$offset),
        array('$limit'=>$per_page)
    )
),
array( 'timeout' => $timeout )
);

有关详细信息,请参阅documentation