集計関数を使用して 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 レコードのみをフェッチしようとしているので、なぜこれが起こっているのかわかりません。すべてのレコードを選択した後に攻撃が実行され、エラーが発生していると思います。侵略以外にこれを行うためのより良い方法はありますか?
タイムアウトを -1 に設定できますが、ドライバーが最初の応答を得るまで永遠に待機するため、これは適切なオプションでしょうか?