MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Maneira eficiente de paginação com MongoDB e ASP.NET MVC


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