Tidak yakin tentang kinerja dalam kueri besar, tetapi ini setidaknya merupakan opsi.
Anda dapat menambahkan hasil Anda ke array dengan mengelompokkan/mendorong dan kemudian melepasnya dengan includeArrayIndex
seperti ini:
[
{$match: {author: {$ne: 1}}},
{$limit: 10000},
{$group: {
_id: 1,
book: {$push: {title: '$title', author: '$author', copies: '$copies'}}
}},
{$unwind: {path: '$book', includeArrayIndex: 'rownum'}},
{$project: {
author: '$book.author',
title: '$book.title',
copies: '$book.copies',
rownum: 1
}}
]
Sekarang, jika database Anda berisi sejumlah besar catatan, dan Anda bermaksud untuk membuat paginasi, Anda dapat menggunakan tahap $skip dan kemudian $limit 10 atau 20 atau apa pun yang ingin Anda tampilkan per halaman, dan cukup tambahkan nomor dari $skip tahap ke rownum Anda dan Anda akan mendapatkan posisi sebenarnya tanpa harus mendorong semua hasil Anda untuk menghitungnya.