Cara Menggunakan Pagination di MongoDB

Pagination adalah teknik yang digunakan untuk membagi data menjadi beberapa bagian atau halaman, sehingga memudahkan pengguna dalam mengakses data dalam jumlah besar. Di MongoDB, pagination dapat diimplementasikan menggunakan beberapa metode, seperti skip()
dan limit()
, atau dengan cursor berbasis ID untuk performa yang lebih baik.
1. Menggunakan skip()
dan limit()
Metode paling sederhana untuk melakukan pagination di MongoDB adalah dengan menggabungkan skip()
dan limit()
.
limit(n)
: Membatasi jumlah dokumen yang dikembalikan.skip(n)
: Melewati sejumlah dokumen sebelum menampilkan hasil.
Contoh Implementasi:
// Halaman 1: Menampilkan 10 data pertama db.collection.find().limit(10); // Halaman 2: Melewati 10 data pertama dan menampilkan 10 berikutnya db.collection.find().skip(10).limit(10); // Halaman 3: Melewati 20 data pertama dan menampilkan 10 berikutnya db.collection.find().skip(20).limit(10);
Kelemahan Metode Ini:
- Semakin besar nilai
skip()
, semakin lambat performanya karena MongoDB harus memindai semua dokumen yang dilewati.
2. Pagination Menggunakan _id
atau Field Indeks Lainnya
Untuk meningkatkan performa, kita bisa menggunakan field yang terindeks (seperti _id
) sebagai penanda (cursor) alih-alih menggunakan skip()
.
Contoh Implementasi:
// Halaman 1: Ambil 10 data pertama const firstPage = db.collection.find().sort({ _id: 1 }).limit(10); let lastId = firstPage[firstPage.length - 1]._id; // Halaman 2: Ambil data setelah `lastId` const nextPage = db.collection.find({ _id: { $gt: lastId } }) .sort({ _id: 1 }) .limit(10); lastId = nextPage[nextPage.length - 1]._id; // Lanjutkan untuk halaman berikutnya
Keuntungan:
- Lebih cepat karena menggunakan indeks dan tidak perlu memindai semua dokumen sebelumnya.
3. Menggunakan aggregate()
untuk Pagination Kompleks
Jika membutuhkan pagination dengan pengurutan atau filter yang lebih kompleks, kita bisa menggunakan pipeline aggregate()
.
Contoh Implementasi:
db.collection.aggregate([ { $match: { status: "active" } }, // Filter data { $sort: { createdAt: -1 } }, // Urutkan berdasarkan tanggal { $skip: 20 }, // Lewati 20 dokumen { $limit: 10 } // Batasi 10 dokumen per halaman ]);
Kesimpulan
- Untuk pagination sederhana, gunakan
skip()
danlimit()
, tetapi hati-hati dengan performa pada dataset besar. - Untuk performa lebih baik, gunakan cursor berbasis ID atau field terindeks lainnya.
- Jika membutuhkan operasi kompleks (filter, pengurutan), gunakan
aggregate()
.