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