विषय आईडी द्वारा आदेश देना
अगर आपका 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
. होंगे अंतिम विषय आईडी पिछले पृष्ठ पर शामिल है)। यह इस बात पर निर्भर करेगा कि आप अपने यूजर इंटरफेस में पेजिंग कैसे प्रस्तुत करते हैं - इस दृष्टिकोण का उपयोग करना सबसे आसान होगा यदि आपके यूआई में केवल एक विशिष्ट पेज पर कूदने के बजाय संदेशों का "अगला" पेज दिखाने का विकल्प है।