Sejak v.3.4 (saya pikir) MongoDB sekarang memiliki operator pipa agregasi baru bernama 'facet' yang dengan kata-kata mereka sendiri:
Memproses beberapa saluran agregasi dalam satu tahap pada kumpulan dokumen input yang sama. Setiap sub-pipa memiliki bidangnya sendiri dalam dokumen keluaran di mana hasilnya disimpan sebagai larik dokumen.
Dalam kasus khusus ini, ini berarti seseorang dapat melakukan sesuatu seperti ini:
$result = $collection->aggregate([
{ ...execute queries, group, sort... },
{ ...execute queries, group, sort... },
{ ...execute queries, group, sort... },
{
$facet: {
paginatedResults: [{ $skip: skipPage }, { $limit: perPage }],
totalCount: [
{
$count: 'count'
}
]
}
}
]);
Hasilnya adalah (dengan untuk ex 100 total hasil):
[
{
"paginatedResults":[{...},{...},{...}, ...],
"totalCount":[{"count":100}]
}
]