Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mencapai Penomboran MongoDB yang Cekap dengan mgo.v2?

Bagaimanakah Saya Boleh Mencapai Penomboran MongoDB yang Cekap dengan mgo.v2?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-21 17:42:09688semak imbas

How Can I Achieve Efficient MongoDB Pagination with mgo.v2?

Penomboran MongoDB yang cekap menggunakan mgo

MongoDB menyediakan sokongan terbina dalam untuk penomboran menggunakan Query.Skip() dan Query.Limit(). Walau bagaimanapun, kaedah ini boleh menjadi perlahan untuk set hasil yang besar, kerana MongoDB mesti berulang melalui semua dokumen hasil untuk meninggalkan dokumen yang perlu dilangkau.

MongoDB menawarkan penyelesaian dengan menyediakan ciri cursor.min() yang membolehkan anda menentukan entri indeks pertama untuk menyenaraikan hasil. Malangnya, pemacu mgo.v2 tidak mempunyai panggilan API untuk menentukan cursor.min().

Untuk mencapai paging yang cekap menggunakan ciri cursor.min() MongoDB dengan mgo.v2, anda boleh menggunakan Database.Run () kaedah untuk melaksanakan arahan MongoDB secara langsung. Arahan find menyokong penetapan hujah min.

Selepas setiap kumpulan hasil, anda boleh menjana dokumen min daripada dokumen terakhir hasil pertanyaan dan menetapkannya sebelum melaksanakan pertanyaan untuk kumpulan seterusnya. Dokumen min harus mengandungi nilai entri indeks yang digunakan untuk melaksanakan pertanyaan.

Proses ini boleh dilakukan secara manual, seperti yang diterangkan dalam jawapan, atau anda boleh menggunakan perpustakaan pihak ketiga seperti github.com/ icza/minquery, yang menyediakan pembungkus untuk mengkonfigurasi dan melaksanakan perintah find MongoDB, termasuk menentukan kursor.

Menggunakan minquery, anda boleh menentukan kursor min seperti ini:

q := minquery.New(session.DB(""), "users", bson.M{"country": "USA"}).
    Sort("name", "_id").Limit(10).
    Cursor(cursor)

di mana kursor ialah kursor yang diperoleh daripada kumpulan sebelumnya.

Perhatikan bahawa apabila menggunakan MinQuery.All(), anda perlu memberikan nama daripada medan kursor sebagai hujah terakhir. Selain itu, jika anda mendapatkan hasil separa, anda mesti memasukkan semua medan yang merupakan sebahagian daripada kursor (masukan indeks) walaupun anda tidak berhasrat untuk menggunakannya secara langsung, kerana MinQuery.All() memerlukan semua nilai daripada medan kursor untuk mencipta nilai kursor yang betul.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Penomboran MongoDB yang Cekap dengan mgo.v2?. 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