MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Modo efficiente di paging con MongoDB e ASP.NET MVC

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