Sedan v.3.4 (tror jag) har MongoDB nu en ny aggregeringspipeline-operatör vid namn 'facet' som med deras egna ord:
Behandlar flera aggregeringspipelines inom ett enda steg på samma uppsättning indatadokument. Varje delpipeline har sitt eget fält i utdatadokumentet där dess resultat lagras som en array av dokument.
I det här specifika fallet betyder det att man kan göra något så här:
$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 blir (med ex 100 totalt resultat):
[
{
"paginatedResults":[{...},{...},{...}, ...],
"totalCount":[{"count":100}]
}
]