collection: users
fields: name, age
年齢別にグループ化され、年齢別にソートされたユーザーの数を返す PHP の map reduce 関数を適用したいと考えています。
ネイティブの php-mongo ドライバーを使用してこれを行う PHP の良い例は見つかりません。もちろん、結果が膨大になる可能性があるため、クライアント側でソートしたくありません。
接続があり、コレクションのグラブが既にソートされていると仮定します。結果を取得するには、 MongoCollection::group()関数を使用する必要があります。
$keys = array('age' => 1);
$initial = array('count' => 0);
$reduce = "function(doc, out) { out.count++; }";
$result = $collection->group($keys, $initial, $reduce);
var_dump($result)
並べ替えに関しては、MongoDB はグループの結果の並べ替えをサポートしていないため、php で行う必要があります。これは、group() がカーソルではなく単一のドキュメントを返し、返される前に並べ替えることができないためです。ドキュメントに従って:
「グループ化されたデータを並べ替えるには、返されたときにクライアント側で並べ替えるだけです。」