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

आधिकारिक मोंगोडब क्लाइंट का उपयोग करके नोडज में मोंगोडब में कर्सर आधारित पेजिनेशन जैसे ट्विटर और फेसबुक एपीआई को कैसे कार्यान्वित करें?

कर्सर आधारित पेजिनेशन को संग्रह में किसी भी फ़ील्ड का उपयोग करके कार्यान्वित किया जा सकता है जो अद्वितीय, आदेश देने योग्य और अपरिवर्तनीय है .

_id सभी को संतुष्ट करें अद्वितीय, क्रमबद्ध और अपरिवर्तनीय स्थितियाँ। इस फ़ील्ड के आधार पर हम _id . के साथ पेज परिणाम को सॉर्ट और रिटर्न कर सकते हैं बाद के अनुरोध के लिए कर्सर के रूप में अंतिम दस्तावेज़।

curl https://api.mixmax.com/items?limit=2

const items = db.items.find({}).sort({
   _id: -1
}).limit(2);

const next = items[items.length - 1]._id
res.json({ items, next })

जब उपयोगकर्ता दूसरा पृष्ठ प्राप्त करना चाहता है, तो वे यूआरएल पर कर्सर (अगले के रूप में) पास करते हैं:curl https://api.mixmax.com/items?limit=2&next=590e9abd4abbf1165862d342

const items = db.items.find({
  _id: { $lt: req.query.next }
}).sort({
   _id: -1
}).limit(2);

const next = items[items.length - 1]._id
res.json({ items, next })

यदि हम किसी भिन्न क्रम में परिणाम वापस करना चाहते हैं, जैसे कि आइटम की तारीख तो हम जोड़ देंगे sort=launchDate क्वेरीस्ट्रिंग के लिए।curl https://api.mixmax.com/items?limit=2&sort=launchDate

const items = db.items.find({}).sort({
   launchDate: -1
}).limit(2);

const next = items[items.length - 1].launchDate;
res.json({ items, next })

बाद के पेज अनुरोध के लिए
curl https://api.mixmax.com/items?limit=2&sort=launchDate&next=2017-09-11T00%3A44%3A54.036Z

const items = db.items.find({
  launchDate: { $lt: req.query.next }
}).sort({
   _id: -1
}).limit(2);

const next = items[items.length - 1].launchDate;
res.json({ items, next });

अगर हम एक ही दिन और समय पर वस्तुओं का एक गुच्छा लॉन्च करते हैं? अब हमारा launchDate फ़ील्ड अब अद्वितीय नहीं है और अद्वितीय, व्यवस्थित और अपरिवर्तनीय satisfy को संतुष्ट नहीं करती है . स्थि‍ति। हम इसे कर्सर फ़ील्ड के रूप में उपयोग नहीं कर सकते हैं। लेकिन हम कर्सर उत्पन्न करने के लिए दो क्षेत्रों का उपयोग कर सकते हैं। चूंकि हम जानते हैं कि _id MongoDB में फ़ील्ड हमेशा उपरोक्त तीन शर्तों को पूरा करती है, हम जानते हैं कि यदि हम इसे अपने launchDate के साथ उपयोग करते हैं फ़ील्ड, दो फ़ील्ड का संयोजन आवश्यकताओं को पूरा करेगा और एक साथ कर्सर फ़ील्ड के रूप में उपयोग किया जा सकता है।curl https://api.mixmax.com/items?limit=2&sort=launchDate

const items = db.items.find({}).sort({
   launchDate: -1,
  _id: -1 // secondary sort in case there are duplicate launchDate values
}).limit(2);

const lastItem = items[items.length - 1];
// The cursor is a concatenation of the two cursor fields, since both are needed to satisfy the requirements of being a cursor field
const next = `${lastItem.launchDate}_${lastItem._id}`;
res.json({ items, next });

बाद के पेज अनुरोध के लिए
curl https://api.mixmax.com/items?limit=2&sort=launchDate&next=2017-09-11T00%3A44%3A54.036Z_590e9abd4abbf1165862d342

const [nextLaunchDate, nextId] = req.query.next.split(‘_’);
const items = db.items.find({
  $or: [{
    launchDate: { $lt: nextLaunchDate }
  }, {
    // If the launchDate is an exact match, we need a tiebreaker, so we use the _id field from the cursor.
    launchDate: nextLaunchDate,
  _id: { $lt: nextId }
  }]
}).sort({
   _id: -1
}).limit(2);

const lastItem = items[items.length - 1];
// The cursor is a concatenation of the two cursor fields, since both are needed to satisfy the requirements of being a cursor field
const next = `${lastItem.launchDate}_${lastItem._id}`;
res.json({ items, next });

प्रतिक्रिया:https://engineering.mixmax.com/ ब्लॉग/एपीआई-पेजिंग-बिल्ट-द-राइट-वे/




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगो डिमन सेवा से नहीं चलता है mongod start

  2. नेवला तिथि प्रारूप

  3. मोंगोडब प्रविष्टि से पता चलता है 'दस्तावेजों में तार वैध यूटीएफ -8 होना चाहिए'

  4. मैं async विधि में कोड डीबग क्यों नहीं कर सकता?

  5. मोंगोडब में उप-दस्तावेज़ फ़ील्ड और कुल राशि की गणना करें