Puoi utilizzare SetLimit
sul cursore che rappresenta la query. Ciò limiterà i risultati di MongoDB
, non solo in memoria:
var cursor = collection.FindAll(); // Or any other query.
cursor.SetLimit(50); // Will only return 50.
foreach (var item in cursor)
{
// Process item.
}
Puoi anche utilizzare SetSkip
per impostare un salto (sorprendentemente):
cursor.SetSkip(10);
Nota: Devi impostare queste proprietà sul cursore prima enumerandolo. L'impostazione di quelli dopo non avrà alcun effetto.
A proposito, anche se usi solo Linq
Skip
di e Take
non recupererai migliaia di documenti. MongoDB
batch automaticamente
il risultato per dimensione (il primo batch è di circa 1mb
, il resto sono 4mb
ciascuno) in modo da ottenere solo il primo batch e da esso estrarre i primi 50 documenti. Altro su
Modifica: Penso che ci sia un po' di confusione su LINQ
qui:
Skip
e Take
sono metodi di estensione su entrambi IEnumerable
e IQueryable
. IEnumerable
è pensato per le raccolte di memoria, ma IQueryable
le operazioni sono tradotte dal provider specifico (il driver C# in questo caso). Quindi il codice sopra è equivalente a:
foreach (var item in collection.AsQueryable().SetLimit(50))
{
// Process item.
}