Rumah  >  Artikel  >  hujung hadapan web  >  Bolehkah Penomboran Hadapan Sahaja dengan Pesanan Menghapuskan Had Penomboran MongoDB?

Bolehkah Penomboran Hadapan Sahaja dengan Pesanan Menghapuskan Had Penomboran MongoDB?

DDD
DDDasal
2024-10-24 06:31:02172semak imbas

Can Forward-Only Pagination with Ordering Eliminate MongoDB's Pagination Limitations?

Teknik Penomboran dalam MongoDB: Melangkaui Had skip()

Adalah diakui secara meluas bahawa bergantung pada kaedah skip() untuk MongoDB penomboran boleh membawa kepada isu prestasi apabila data berkembang. Untuk menangani cabaran ini, pendekatan alternatif ialah memanfaatkan susunan semula jadi medan _id untuk penomboran.

ID Dokumen Terakhir

Inti teknik ini terletak pada menentukan ID dokumen terakhir dari halaman sebelumnya, yang kemudiannya digunakan sebagai titik permulaan untuk halaman berikutnya. Walau bagaimanapun, bagi pemula, mengenal pasti ID terakhir boleh mencabar.

Penomboran Hadapan Sahaja dengan Pemesanan _id

Untuk senario di mana penomboran ke belakang atau melangkau ke halaman tertentu bukanlah perlu, satu konsep yang dikenali sebagai "paging hadapan" boleh digunakan. Teknik ini melibatkan lelaran melalui kursor dan menyimpan _id dokumen yang terakhir dilihat untuk pertanyaan berikutnya.

Contoh dengan Pesanan _id:

cursor = db.junk.find().limit(3);

while (cursor.hasNext()) {
   doc = cursor.next();
   if (!cursor.hasNext())
     lastSeen = doc._id;
}

Pesanan Kompleks

Apabila menggunakan medan pesanan yang berbeza selain daripada _id, kerumitan tambahan timbul. Konsepnya tetap sama, tetapi menjadi perlu untuk mengecualikan dokumen yang dilihat sebelum ini menggunakan operator $nin.

Contoh dengan Susunan Kedudukan:

seenIds = [];
cursor = db.junk.find({ "_id": { "$nin": seenIds }, "rank": "$lte": lastSeen }
).sort({ "rank": -1 }).limit(2);

while (cursor.hasNext()) {
   doc = cursor.next();
   seenIds.push(doc._id);
   if (!cursor.hasNext() || lastSeen == null)
     lastSeen = doc.rank;
}

Kesimpulan:

Paging ke hadapan ialah pilihan yang berdaya maju untuk senario di mana penomboran ke belakang tidak diperlukan. Dengan menggunakan operator $nin dan mengurus ID dokumen yang dilihat, teknik ini menyediakan penomboran yang cekap tanpa isu penggunaan memori yang dikaitkan dengan langkau().

Atas ialah kandungan terperinci Bolehkah Penomboran Hadapan Sahaja dengan Pesanan Menghapuskan Had Penomboran MongoDB?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn