Dalla v.3.4 (credo) MongoDB ha ora un nuovo operatore della pipeline di aggregazione chiamato "facet" che nelle loro stesse parole:
Elabora più pipeline di aggregazione all'interno di una singola fase sullo stesso set di documenti di input. Ciascuna pipeline secondaria ha il proprio campo nel documento di output in cui i risultati vengono archiviati come una matrice di documenti.
In questo caso particolare, ciò significa che si può fare qualcosa del genere:
$result = $collection->aggregate([
{ ...execute queries, group, sort... },
{ ...execute queries, group, sort... },
{ ...execute queries, group, sort... },
{
$facet: {
paginatedResults: [{ $skip: skipPage }, { $limit: perPage }],
totalCount: [
{
$count: 'count'
}
]
}
}
]);
Il risultato sarà (con per ex 100 risultati totali):
[
{
"paginatedResults":[{...},{...},{...}, ...],
"totalCount":[{"count":100}]
}
]