ObjectId() का उपयोग करना बिल्कुल ठीक है, हालांकि पेजिनेशन के लिए आपका सिंटैक्स गलत है। आप चाहते हैं:
db.tweets.find().limit(50).sort({"_id":-1});
इसका मतलब है कि आप ट्वीट को _id
. के अनुसार क्रमित करना चाहते हैं अवरोही क्रम में मान और आप सबसे हालिया 50 चाहते हैं। आपकी समस्या यह है कि जब वर्तमान परिणाम सेट बदल रहा है तो पेजिनेशन मुश्किल है - इसलिए अगले पृष्ठ के लिए स्किप का उपयोग करने के बजाय, आप सबसे छोटे _id
परिणाम सेट में (50 वां सबसे हालिया _id
मान और उसके बाद अगला पृष्ठ प्राप्त करें:
db.tweets.find( {_id : { "$lt" : <50th _id> } } ).limit(50).sort({"_id":-1});
यह आपको अगले "सबसे हाल के" ट्वीट देगा, बिना नए आने वाले ट्वीट्स आपके पेजिनेशन को समय के साथ खराब कर देंगे।
इस बारे में चिंता करने की बिल्कुल आवश्यकता नहीं है कि _id
वैल्यू इंसर्शन ऑर्डर के अनुरूप है - यह काफी करीब 99.999% होगा, और कोई भी वास्तव में उप-सेकेंड स्तर पर परवाह नहीं करता है कि कौन सा ट्वीट पहले आया था - आप यह भी नोटिस कर सकते हैं कि ट्विटर अक्सर ट्वीट्स को क्रम से प्रदर्शित करता है, यह इतना महत्वपूर्ण नहीं है।
अगर यह है महत्वपूर्ण है, तो आपको उसी तकनीक का उपयोग करना होगा लेकिन "ट्वीट तिथि" के साथ जहां उस तिथि को केवल एक तिथि के बजाय टाइमस्टैम्प होना होगा।