1

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

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

$filter_query 是另一个包含时间图的数组,就像

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

)

我不确定为什么会发生这种情况,因为我试图只获取 50 条记录。我认为攻击是在选择所有记录后执行的,它导致了错误。除了攻击性之外,还有什么更好的方法来做到这一点?

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

4

1 回答 1

5

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

$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 )
);

有关更多信息,请参阅文档

于 2013-11-15T08:46:21.987 回答