Tidak apa-apa untuk menggunakan ObjectId() meskipun sintaks untuk pagination Anda salah. Anda ingin:
db.tweets.find().limit(50).sort({"_id":-1});
Ini mengatakan Anda ingin tweet diurutkan berdasarkan _id
nilai dalam urutan menurun dan Anda ingin yang terbaru 50. Masalah Anda adalah kenyataan bahwa pagination rumit ketika set hasil saat ini berubah - jadi daripada menggunakan lewati untuk halaman berikutnya, Anda ingin mencatat _id
di set hasil (_id
terbaru ke-50) nilai dan kemudian dapatkan halaman berikutnya dengan:
db.tweets.find( {_id : { "$lt" : <50th _id> } } ).limit(50).sort({"_id":-1});
Ini akan memberi Anda tweet "terbaru" berikutnya, tanpa tweet baru yang masuk mengacaukan pagination Anda dari waktu ke waktu.
Sama sekali tidak perlu khawatir apakah _id
nilai benar-benar sesuai dengan urutan penyisipan - itu akan menjadi 99,999% cukup dekat, dan tidak ada yang benar-benar peduli pada tingkat sub-detik tweet mana yang lebih dulu - Anda bahkan mungkin memperhatikan Twitter sering menampilkan tweet yang rusak, hanya saja tidak terlalu kritis.
Jika adalah kritis, maka Anda harus menggunakan teknik yang sama tetapi dengan "tanggal tweet" di mana tanggal tersebut harus berupa stempel waktu, bukan sekadar tanggal.