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.
}