От v.3.4 (мисля) MongoDB вече има нов оператор на конвейер за агрегиране, наречен „facet“, който по собствените им думи:
Обработва множество конвейери за агрегиране в рамките на един етап върху същия набор от входни документи. Всеки подконвейер има свое собствено поле в изходния документ, където резултатите му се съхраняват като масив от документи.
В този конкретен случай това означава, че човек може да направи нещо подобно:
$result = $collection->aggregate([
{ ...execute queries, group, sort... },
{ ...execute queries, group, sort... },
{ ...execute queries, group, sort... },
{
$facet: {
paginatedResults: [{ $skip: skipPage }, { $limit: perPage }],
totalCount: [
{
$count: 'count'
}
]
}
}
]);
Резултатът ще бъде (с за пример 100 общи резултати):
[
{
"paginatedResults":[{...},{...},{...}, ...],
"totalCount":[{"count":100}]
}
]