Você pode usar
SetLimit
no cursor que representa a consulta. Isso limitará os resultados do MongoDB
, não apenas na memória:var cursor = collection.FindAll(); // Or any other query.
cursor.SetLimit(50); // Will only return 50.
foreach (var item in cursor)
{
// Process item.
}
Você também pode usar
SetSkip
para definir um salto (surpreendentemente):cursor.SetSkip(10);
Observação: Você deve definir essas propriedades no cursor antes enumerando-o. Definir esses depois não terá efeito.
A propósito, mesmo que você use apenas
Linq
's Skip
e Take
você não estará recuperando milhares de documentos. MongoDB
agrupa automaticamente
o resultado por tamanho (o primeiro lote tem cerca de 1mb
, o resto são 4mb
cada) então você só pegaria o primeiro lote e tiraria os primeiros 50 documentos dele. Mais sobre Editar: Acho que há alguma confusão sobre
LINQ
aqui:Skip
e Take
são métodos de extensão em ambos IEnumerable
e IQueryable
. IEnumerable
destina-se a coleções de memória, mas IQueryable
as operações são traduzidas pelo provedor específico (o driver C# neste caso). Portanto, o código acima é equivalente a:foreach (var item in collection.AsQueryable().SetLimit(50))
{
// Process item.
}