Możesz użyć SetLimit
na kursorze reprezentującym zapytanie. To ograniczy wyniki z MongoDB , nie tylko w pamięci:
var cursor = collection.FindAll(); // Or any other query.
cursor.SetLimit(50); // Will only return 50.
foreach (var item in cursor)
{
// Process item.
}
Możesz także użyć SetSkip
ustawić pominięcie (o dziwo):
cursor.SetSkip(10);
Uwaga: Musisz ustawić te właściwości na kursorze przed wyliczając to. Ustawienie tych po nie przyniesie żadnego efektu.
Przy okazji, nawet jeśli używasz tylko Linq Skip i Take nie będziesz pobierać tysięcy dokumentów. MongoDB automatycznie partiami
wynik według rozmiaru (pierwsza partia to około 1mb , reszta to 4mb każdy), więc dostaniesz tylko pierwszą partię i wyjmiesz z niej pierwszych 50 dokumentów. Więcej na
Edytuj: Myślę, że jest trochę zamieszania co do LINQ tutaj:
Skip i Take są metodami rozszerzającymi na obu IEnumerable i IQueryable . IEnumerable jest przeznaczony do kolekcji pamięci, ale IQueryable operacje są tłumaczone przez konkretnego dostawcę (w tym przypadku sterownik C#). Więc powyższy kod jest równoważny z:
foreach (var item in collection.AsQueryable().SetLimit(50))
{
// Process item.
}