"पेजिंग" की सामान्य अवधारणा .skip()
. का उपयोग करना है जो अनिवार्य रूप से उन परिणामों पर "छोड़ देता है" जो पहले ही प्राप्त किए जा चुके हैं, इसलिए आप अनिवार्य रूप से ऐसा कर सकते हैं:
var q = Post.find().sort( "rating" ).skip(10).limit(10);
लेकिन वास्तव में, जैसा कि आप कल्पना कर सकते हैं कि जब आप कुछ "पृष्ठ" प्राप्त करेंगे तो यह काफी धीमा हो जाएगा। तो आप वास्तव में कुछ बेहतर चाहते हैं। अनिवार्य रूप से यह एक "रेंज क्वेरी" है जहां आप प्राप्त परिणामों के अंतिम सेट की तुलना में उच्च (या अवरोही होने पर कम) परिणाम प्राप्त करना चाहते हैं। तो 5
. का अंतिम मान दिया गया है तो आप जितना करेंगे उससे अधिक के लिए:
var q = Post.find({ "rating": { "$gt": 5 } }).sort( "rating" ).limit(10);
ठीक लग रहा है, लेकिन वास्तव में अभी भी एक समस्या है। क्या होगा यदि अगले "पृष्ठ" में भी 5 की रेटिंग वाले परिणाम हों? यह क्वेरी उन पर छोड़ देगी और उन्हें कभी प्रदर्शित नहीं करेगी।
स्मार्ट बात यह है कि सभी _id
. को "रखें" दस्तावेज़ से मान क्योंकि वे अद्वितीय कुंजी हैं। मूल रूप से उसी तरह की चीज़ लागू करें, इस समय को छोड़कर आप सुनिश्चित करें कि आप पिछले पृष्ठ के परिणामों को अपने नए में शामिल नहीं कर रहे हैं। $nin
ऑपरेटर यहाँ मदद करता है:
var q = Post.find({ "rating": { "$gte": 5 }, "_id": { "$nin": seenIds } })
.sort( "rating" ).limit(10);
क्या seenIds
परिणामों का केवल अंतिम पृष्ठ है या कुछ और उस मूल्य के "घनत्व" पर निर्भर करता है जिसे आप क्रमबद्ध कर रहे हैं, और निश्चित रूप से आपको इन्हें सत्र चर या कुछ में "रखने" की आवश्यकता है।
लेकिन इसे अनुकूलित करने का प्रयास करें, क्योंकि श्रेणी प्रश्न आमतौर पर आपका सर्वश्रेष्ठ प्रदर्शन परिणाम होते हैं।