Siden v.3.4 (tror jeg) har MongoDB nu en ny aggregeringspipeline-operatør ved navn 'facet', som med deres egne ord:
Behandler flere aggregeringspipelines inden for et enkelt trin på det samme sæt inputdokumenter. Hver underpipeline har sit eget felt i outputdokumentet, hvor dens resultater gemmes som en række dokumenter.
I dette særlige tilfælde betyder det, at man kan gøre sådan noget:
$result = $collection->aggregate([
{ ...execute queries, group, sort... },
{ ...execute queries, group, sort... },
{ ...execute queries, group, sort... },
{
$facet: {
paginatedResults: [{ $skip: skipPage }, { $limit: perPage }],
totalCount: [
{
$count: 'count'
}
]
}
}
]);
Resultatet bliver (med f.eks. 100 samlede resultater):
[
{
"paginatedResults":[{...},{...},{...}, ...],
"totalCount":[{"count":100}]
}
]