Nie jestem pewien co do wydajności w przypadku dużych zapytań, ale jest to przynajmniej opcja.
Możesz dodać swoje wyniki do tablicy poprzez grupowanie/przesuwanie, a następnie rozwijanie za pomocą includeArrayIndex
tak:
[
{$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
}}
]
Teraz, jeśli Twoja baza danych zawiera dużą liczbę rekordów i zamierzasz podzielić się na strony, możesz użyć etapu $skip, a następnie $limit 10 lub 20 lub cokolwiek chcesz wyświetlić na stronie, i po prostu dodaj liczbę z $skip etap do swojego numeru, a uzyskasz rzeczywistą pozycję bez konieczności wciskania wszystkich wyników w celu ich wyliczenia.