Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 聚合函数的MongoCorSortimeoutException_Php_Mongodb - Fatal编程技术网

Php 聚合函数的MongoCorSortimeoutException

Php 聚合函数的MongoCorSortimeoutException,php,mongodb,Php,Mongodb,我试图使用聚合函数从Mongo集合中获取一些数据,但它给了我MongoCorSortimeoutException。我试图一次只选择50张唱片,而这个收藏有1700多万张唱片。这是从PHP完成的,我的代码如下: $data = $my_collection->aggregate(array( array('$match'=>$filter_query),

我试图使用聚合函数从Mongo集合中获取一些数据,但它给了我MongoCorSortimeoutException。我试图一次只选择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_查询是另一个数组,它包含timestmap,如下所示

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

)
我不知道为什么会发生这种情况,因为我试图只获取50条记录。我认为这是在选择了所有记录之后执行的,这是导致错误的原因。除了侵略,还有什么更好的方法吗


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

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

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

有关更多信息,请参阅

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

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

有关更多信息,请参阅

作为优化的一部分,您可以1)首先只选择15封电子邮件;2) 然后选择所选电子邮件中引用的记录;3) 应用所有其他规则。这样,您将显著减少要聚合的记录数。如果您可以使用缓存或预先计算的结果来执行如此昂贵的操作,那也太好了。顺便说一下,它为我返回了一个错误[errmsg]=>异常:字段(聚合)3的类型错误!=2您可以参考1.5.0版驱动程序的on stackoverflowAs。看起来您可以传入一系列选项,在这些选项中可以使用maxTimeMS参数定义超时。例如:$data=$my_collection->aggregate($pipeline,['maxtimes'=>120000]);请参阅
超时
选项已弃用。它必须是
['socketTimeoutMS'=>$timeout]
。作为优化的一部分,您可以1)首先只选择15封电子邮件;2) 然后选择所选电子邮件中引用的记录;3) 应用所有其他规则。这样,您将显著减少要聚合的记录数。如果您可以使用缓存或预先计算的结果来执行如此昂贵的操作,那也太好了。顺便说一下,它为我返回了一个错误[errmsg]=>异常:字段(聚合)3的类型错误!=2您可以参考1.5.0版驱动程序的on stackoverflowAs。看起来您可以传入一系列选项,在这些选项中可以使用maxTimeMS参数定义超时。例如:$data=$my_collection->aggregate($pipeline,['maxtimes'=>120000]);请参阅
超时
选项已弃用。它必须是
['socketTimeoutMS'=>$timeout]