Niet zeker over de prestaties bij grote zoekopdrachten, maar dit is in ieder geval een optie.
U kunt uw resultaten aan een array toevoegen door te groeperen/duwen en vervolgens ontspannen met includeArrayIndex
zoals dit:
[
{$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
}}
]
Nu, als uw database een groot aantal records bevat en u van plan bent te pagineren, kunt u de $skip-fase gebruiken en vervolgens $ limiet 10 of 20 of wat u ook per pagina wilt weergeven, en gewoon het nummer van de $skip toevoegen stap naar je rownum en je krijgt de echte positie zonder al je resultaten te hoeven pushen om ze op te sommen.