MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB पेजिनेशन के लिए रेंज क्वेरी

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% होगा, और कोई भी वास्तव में उप-सेकेंड स्तर पर परवाह नहीं करता है कि कौन सा ट्वीट पहले आया था - आप यह भी नोटिस कर सकते हैं कि ट्विटर अक्सर ट्वीट्स को क्रम से प्रदर्शित करता है, यह इतना महत्वपूर्ण नहीं है।

अगर यह है महत्वपूर्ण है, तो आपको उसी तकनीक का उपयोग करना होगा लेकिन "ट्वीट तिथि" के साथ जहां उस तिथि को केवल एक तिथि के बजाय टाइमस्टैम्प होना होगा।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Model.find().toArray() .toArray() विधि नहीं होने का दावा करते हुए

  2. यदि मौजूद है तो कैसे अपडेट करें अन्यथा नया दस्तावेज़ डालें?

  3. क्या है Mongoose त्रुटि ObjectId पर कास्ट करें मान XXX के लिए पथ _id पर विफल रहा?

  4. MongoDB दस्तावेज़ को अनमर्शलिंग करते समय नल को कैसे अनदेखा करें?

  5. MongoDB में फ़ाइल आयात करते समय मौजूदा दस्तावेज़ों को कैसे बदलें