Не съм сигурен за ефективността при големи заявки, но това е поне опция.
Можете да добавите резултатите си към масив чрез групиране/натискане и след това развъртете с includeArrayIndex
така:
[
{$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
}}
]
Сега, ако вашата база данни съдържа голямо количество записи и възнамерявате да пагинирате, можете да използвате етапа $skip и след това $limit 10 или 20 или каквото искате да показвате на страница и просто да добавите числото от $skip етап до вашия rownum и ще получите реалната позиция, без да се налага да натискате всичките си резултати, за да ги изброите.