Od verze 3.4 (myslím) má nyní MongoDB nového operátora agregačního kanálu s názvem 'facet', který jejich vlastními slovy:
Zpracovává více agregačních kanálů v rámci jedné fáze na stejné sadě vstupních dokumentů. Každý dílčí kanál má ve výstupním dokumentu své vlastní pole, kde jsou jeho výsledky uloženy jako pole dokumentů.
V tomto konkrétním případě to znamená, že lze udělat něco takového:
$result = $collection->aggregate([
{ ...execute queries, group, sort... },
{ ...execute queries, group, sort... },
{ ...execute queries, group, sort... },
{
$facet: {
paginatedResults: [{ $skip: skipPage }, { $limit: perPage }],
totalCount: [
{
$count: 'count'
}
]
}
}
]);
Výsledek bude (s celkovými výsledky např. 100):
[
{
"paginatedResults":[{...},{...},{...}, ...],
"totalCount":[{"count":100}]
}
]