Bạn có thể sử dụng SetLimit
trên con trỏ đại diện cho truy vấn. Điều đó sẽ giới hạn kết quả từ MongoDB
, không chỉ trong bộ nhớ:
var cursor = collection.FindAll(); // Or any other query.
cursor.SetLimit(50); // Will only return 50.
foreach (var item in cursor)
{
// Process item.
}
Bạn cũng có thể sử dụng SetSkip
để đặt bỏ qua (đáng ngạc nhiên):
cursor.SetSkip(10);
Lưu ý: Bạn phải đặt các thuộc tính đó trên con trỏ trước liệt kê nó. Đặt những thứ sau sẽ không có hiệu lực.
Nhân tiện, ngay cả khi bạn chỉ sử dụng Linq
của Skip
và Take
bạn sẽ không truy xuất hàng ngàn tài liệu. MongoDB
hàng loạt tự động
kết quả theo kích thước (lô đầu tiên khoảng 1mb
, phần còn lại là 4mb
mỗi) vì vậy bạn sẽ chỉ nhận được lô đầu tiên và lấy 50 tài liệu đầu tiên ra khỏi nó. Thêm trên
Chỉnh sửa: Tôi nghĩ rằng có một số nhầm lẫn về LINQ
tại đây:
Skip
và Take
là các phương thức mở rộng trên cả IEnumerable
và IQueryable
. IEnumerable
có nghĩa là trong bộ sưu tập bộ nhớ, nhưng IQueryable
hoạt động được dịch bởi nhà cung cấp cụ thể (trình điều khiển C # trong trường hợp này). Vì vậy, đoạn mã trên tương đương với:
foreach (var item in collection.AsQueryable().SetLimit(50))
{
// Process item.
}