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