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

मोंगोडब क्वेरी के भीतर किसी आइटम की अनुक्रमणिका प्राप्त करें

विषय आईडी द्वारा आदेश देना

अगर आपका subjectID एक नीरस रूप से बढ़ते मूल्य (उदाहरण के लिए, एक MongoDB डिफ़ॉल्ट ऑब्जेक्ट) है (या बदला जा सकता है), आपके पास सामान्य find() का उपयोग करके एक सीधा विकल्प है उपयुक्त प्रकार, छोड़ें और सीमा के साथ। इस मामले में आप सब्जेक्ट आईडी वाले दस्तावेज़ ढूंढ सकते हैं $gte (इससे बड़ा या इसके बराबर) आपका subjectID :

var page = 1;
var subjectID = ObjectId("515535a0760fe8735f5f6897");
db.users.find(
    { _id: { $gte : subjectID } }
).sort({'_id':1}).skip(page*20).limit(20)

एकत्रीकरण फ्रेमवर्क

MongoDb 2.4 की तरह, परिणाम पाइपलाइन में दस्तावेज़ की स्थिति के आधार पर मिलान करने के लिए एकत्रीकरण ढांचे में ऐसी कोई सुविधा नहीं है। आप MongoDB जीरा प्रोजेक्ट के SERVER के लिए एक नया फीचर सुझाव दर्ज कर सकते हैं। कतार।

ऐसा लगता है कि आप एक नया पाइपलाइन ऑपरेटर चाहते हैं जैसे कि $matchfrom जो $matchfrom . की पहली घटना तक किसी भी दस्तावेज़ को अनदेखा कर देगा मानदंड। फिर आप एक $limit . जोड़ सकते हैं अगले n आइटम लेने के लिए। आप $matchfrom . से पहले आउटपुट को सॉर्ट करना भी चाहेंगे इसलिए एक अनुमानित परिणाम है।

बढ़ते विषय आईडी की तुलना में यह अधिक जटिल लगता है, लेकिन अधिक उन्नत खोज मानदंड या एकत्रीकरण पाइपलाइन में गणना किए गए परिणामों के आधार पर पेजिंग करने के लिए उपयोग का मामला हो सकता है।

वैकल्पिक दृष्टिकोण

एग्रीगेशन फ्रेमवर्क में ऐसी सुविधा के लिए भविष्य के समर्थन के अलावा, आपके पास कोड में समान मिलान दृष्टिकोण को लागू करने के लिए कुछ विकल्प हैं:

  • पुराने group() का इस्तेमाल करें एक finalize() . के साथ एकत्रीकरण आदेश समारोह। नोट:group() नहीं . करता है शार्प किए गए क्लस्टर के साथ काम करें।

  • MapReduce का उपयोग करें और एक finalize() समारोह

  • एग्रीगेशन फ्रेमवर्क से पूरे परिणाम सेट को प्राप्त करें, और अपने एप्लिकेशन कोड में परिणामों के मिलान/कमी को लागू करें (हालांकि यह कुछ हद तक "पेजिंग" धारणा को हरा देता है यदि आप प्रत्येक अनुरोध के लिए सभी पेज ला रहे हैं)।

प्रदर्शन विचार

skip के साथ प्रश्न अभी भी मध्यवर्ती अनुक्रमणिका प्रविष्टियों के माध्यम से पढ़ना है, इसलिए बड़ी संख्या में दस्तावेज़ों को छोड़ना बहुत कुशल नहीं होगा।

स्किप ऑफ़सेट के साथ पेजिंग करने के बजाय, आप पिछले पेज की आखिरी प्रविष्टि से शुरू करके लगातार पेज क्वेरी करने पर विचार कर सकते हैं (यानी पहला पेज $gte होगा। आरंभिक विषय आईडी और उसके बाद के पृष्ठ $gt . होंगे अंतिम विषय आईडी पिछले पृष्ठ पर शामिल है)। यह इस बात पर निर्भर करेगा कि आप अपने यूजर इंटरफेस में पेजिंग कैसे प्रस्तुत करते हैं - इस दृष्टिकोण का उपयोग करना सबसे आसान होगा यदि आपके यूआई में केवल एक विशिष्ट पेज पर कूदने के बजाय संदेशों का "अगला" पेज दिखाने का विकल्प है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB + Django की स्थापना

  2. 10000 दस्तावेज़ सम्मिलित करने पर अधिकतम कॉल स्टैक आकार पार हो गया

  3. MongoError:सर्वर से कनेक्ट करने में विफल [लोकलहोस्ट:27017] पहले कनेक्ट पर

  4. बीएसओएन टाइमस्टैम्प को मोंगो चेंजस्ट्रीम से डेट में कैसे बदलें?

  5. कई अपडेट करें यदि मौजूद है, अन्यथा प्रत्येक लीड के लिए बनाएं जो मौजूद नहीं है एक नया दस्तावेज़