MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Effiziente Paging-Methode mit MongoDB und ASP.NET MVC

Sie können SetLimit verwenden auf dem Cursor, der die Abfrage darstellt. Dadurch werden die Ergebnisse von MongoDB eingeschränkt , nicht nur im Speicher:

var cursor = collection.FindAll(); // Or any other query.
cursor.SetLimit(50); // Will only return 50.
foreach (var item in cursor)
{
    // Process item.
}

Sie können auch SetSkip verwenden um (überraschenderweise) einen Sprung zu setzen:

cursor.SetSkip(10);

Hinweis: Sie müssen diese Eigenschaften für den Cursor vorher festlegen es aufzuzählen. Wenn Sie diese nach setzen, hat dies keine Auswirkung.

Übrigens auch dann, wenn Sie nur Linq verwenden 's Skip und Take Sie werden nicht Tausende von Dokumenten abrufen. MongoDB automatisch stapeln das Ergebnis nach Größe (der erste Batch ist ungefähr 1mb , der Rest sind 4mb jedes), also würden Sie nur den ersten Stapel bekommen und die ersten 50 Dokumente daraus entnehmen. Mehr auf

Bearbeiten: Ich denke, es gibt einige Verwirrung über LINQ hier:

Skip und Take sind Erweiterungsmethoden auf beiden IEnumerable und IQueryable . IEnumerable ist für In-Memory-Sammlungen gedacht, aber IQueryable Operationen werden vom jeweiligen Anbieter übersetzt (in diesem Fall der C#-Treiber). Der obige Code ist also äquivalent mit:

foreach (var item in collection.AsQueryable().SetLimit(50))
{
    // Process item.
}