我正在尝试对我的集合(包含超过 20M 个文档)使用聚合方法。
我首先在 Windows shell 中尝试过:
db.data.aggregate([
{$match: {firstname: "Roger"}},
{$group:{"_id":"$id_car",count:{$sum: 1}}},
{$sort: {count: -1}},
{$limit: 50}])
它运行良好,几秒钟后返回结果。
当我在 PHP 中“翻译”它时:
$data = $db->data;
$ops = array(
array(
'$match' => array(
'firstname' => 'Roger'
)
),
array(
'$group' => array(
'_id' => '$id_car',
'count' => array(
'$sum' => 1
)
)
),
array(
'$sort' => array(
'count' => -1
)
),
array(
'$limit' => 4
)
);
$res = $data->aggregate($ops);
我收到超时 PHP 致命错误:
Uncaught exception 'MongoCursorTimeoutException' with message 'localhost:27017: cursor timed out (timeout: 30000, time left: 30:0, status: 0)'
我不知道我的 PHP 代码是否出错,或者 PHP 中的聚合应该比 shell 慢得多?
另外,我在“名字”字段上添加了一个索引,以使查询更快。
顺便说一句,有没有办法将这种调用的超时设置为无穷大?
非常感谢你的帮助 !
乔