v.3.4以降(私は思う)、MongoDBには、「ファセット」という名前の新しい集約パイプライン演算子があります。これは、独自の言葉で:
同じ入力ドキュメントのセットで、単一のステージ内の複数の集約パイプラインを処理します。各サブパイプラインには、出力ドキュメントに独自のフィールドがあり、その結果がドキュメントの配列として保存されます。
この特定のケースでは、これは次のようなことができることを意味します:
$result = $collection->aggregate([
{ ...execute queries, group, sort... },
{ ...execute queries, group, sort... },
{ ...execute queries, group, sort... },
{
$facet: {
paginatedResults: [{ $skip: skipPage }, { $limit: perPage }],
totalCount: [
{
$count: 'count'
}
]
}
}
]);
結果は次のようになります(たとえば、合計100件の結果):
[
{
"paginatedResults":[{...},{...},{...}, ...],
"totalCount":[{"count":100}]
}
]