Seit v.3.4 (glaube ich) hat MongoDB jetzt einen neuen Aggregation-Pipeline-Operator namens „facet“, der in ihren eigenen Worten:
Verarbeitet mehrere Aggregationspipelines innerhalb einer einzigen Stufe für denselben Satz von Eingabedokumenten. Jede Unterpipeline hat ihr eigenes Feld im Ausgabedokument, wo ihre Ergebnisse als Array von Dokumenten gespeichert werden.
In diesem speziellen Fall bedeutet dies, dass man so etwas tun kann:
$result = $collection->aggregate([
{ ...execute queries, group, sort... },
{ ...execute queries, group, sort... },
{ ...execute queries, group, sort... },
{
$facet: {
paginatedResults: [{ $skip: skipPage }, { $limit: perPage }],
totalCount: [
{
$count: 'count'
}
]
}
}
]);
Das Ergebnis ist (bei zB 100 Gesamtergebnissen):
[
{
"paginatedResults":[{...},{...},{...}, ...],
"totalCount":[{"count":100}]
}
]