Anda dapat menggunakan SetLimit
pada kursor yang mewakili kueri. Itu akan membatasi hasil dari MongoDB , tidak hanya di memori:
var cursor = collection.FindAll(); // Or any other query.
cursor.SetLimit(50); // Will only return 50.
foreach (var item in cursor)
{
// Process item.
}
Anda juga dapat menggunakan SetSkip
untuk menyetel lompatan (mengejutkan):
cursor.SetSkip(10);
Catatan: Anda harus mengatur properti tersebut pada kursor sebelum menghitungnya. Menyetelnya setelahnya tidak akan berpengaruh.
Omong-omong, meskipun Anda hanya menggunakan Linq Skip dan Take Anda tidak akan mengambil ribuan dokumen. MongoDB secara otomatis mengelompokkan
hasil berdasarkan ukuran (batch pertama sekitar 1mb , sisanya 4mb masing-masing) sehingga Anda hanya akan mendapatkan batch pertama dan mengambil 50 dokumen pertama darinya. Selengkapnya tentang
Sunting: Saya pikir ada beberapa kebingungan tentang LINQ di sini:
Skip dan Take adalah metode ekstensi pada kedua IEnumerable dan IQueryable . IEnumerable dimaksudkan untuk dalam koleksi memori, tetapi IQueryable operasi diterjemahkan oleh penyedia tertentu (driver C# dalam kasus ini). Jadi kode di atas setara dengan:
foreach (var item in collection.AsQueryable().SetLimit(50))
{
// Process item.
}