Không chắc chắn về hiệu suất trong các truy vấn lớn, nhưng đây ít nhất là một tùy chọn.
Bạn có thể thêm kết quả của mình vào một mảng bằng cách nhóm / đẩy và sau đó thư giãn với includeArrayIndex
như thế này:
[
{$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
}}
]
Bây giờ, nếu cơ sở dữ liệu của bạn chứa một lượng lớn bản ghi và bạn định phân trang, bạn có thể sử dụng giai đoạn $ bỏ qua và sau đó $ giới hạn 10 hoặc 20 hoặc bất kỳ thứ gì bạn muốn hiển thị trên mỗi trang và chỉ cần thêm số từ $ bỏ qua chuyển sang sân khấu của bạn và bạn sẽ có được vị trí thực mà không cần phải đẩy tất cả các kết quả của mình để liệt kê chúng.