MongoDB

MongoDB लेफ्ट जॉइन: एक व्यापक मार्गदर्शिका

Spread the love

विषयसूची

लेफ्ट जॉइन और MongoDB का दृष्टिकोण समझना

SQL डेटाबेस में, एक लेफ्ट जॉइन यह सुनिश्चित करता है कि परिणाम सेट में बाईं तालिका की सभी पंक्तियाँ शामिल हों। यदि दाईं तालिका में कोई मिलान वाली पंक्ति मौजूद है, तो संगत डेटा जुड़ जाता है; अन्यथा, दाईं ओर के फ़ील्ड NULL मानों से भर जाते हैं। MongoDB, एक NoSQL डेटाबेस होने के नाते, में सीधा “LEFT JOIN” कमांड नहीं है। हालाँकि, हम एकत्रीकरण ढाँचे के भीतर शक्तिशाली $lookup ऑपरेटर का उपयोग करके समान कार्यक्षमता प्राप्त कर सकते हैं।

$lookup ऑपरेटर में महारत हासिल करना

$lookup ऑपरेटर निर्दिष्ट फ़ील्ड के आधार पर दो संग्रहों से दस्तावेज़ों को जोड़ता है। यह समझना महत्वपूर्ण है कि यह “बाएँ” संग्रह के सभी दस्तावेज़ों को वापस करता है, भले ही “दाएँ” संग्रह में कोई मिलान मिले या नहीं। आइए इसके सिंटैक्स की जांच करें:


db.collection1.aggregate([
  {
    $lookup: {
      from: "collection2",       // दायाँ संग्रह
      localField: "field1",     // मिलान के लिए collection1 में फ़ील्ड
      foreignField: "field2",    // मिलान के लिए collection2 में फ़ील्ड
      as: "results"              // मिलान किए गए दस्तावेज़ों को रखने के लिए सरणी फ़ील्ड
    }
  }
])

दो संग्रहों पर विचार करें: customers और orders

customers संग्रह:

_id name city
1 John Doe New York
2 Jane Smith London
3 Peter Jones Paris

orders संग्रह:

_id customer_id amount
1 1 100
2 1 200
3 2 50

लेफ्ट जॉइन करने के लिए, हम $lookup का उपयोग करते हैं:


db.customers.aggregate([
  {
    $lookup: {
      from: "orders",
      localField: "_id",
      foreignField: "customer_id",
      as: "orders"
    }
  }
])

यह सभी ग्राहकों को वापस करता है। जिनके ऑर्डर हैं उनके पास एक पॉप्युलेटेड orders सरणी होगी; जिनके पास नहीं है उनके पास एक खाली सरणी होगी।

फ़िल्टरिंग के साथ परिणामों को परिष्कृत करना

$match चरण जॉइन के बाद फ़िल्टरिंग की अनुमति देता है। उदाहरण के लिए, $100 से अधिक ऑर्डर वाले ग्राहकों को खोजने के लिए:


db.customers.aggregate([
  {
    $lookup: { /* ... (ऊपर के समान $lookup) ... */ }
  },
  {
    $match: {
      "orders.amount": { $gt: 100 }
    }
  }
])

उन्नत एकत्रीकरण तकनीकें

एग्रीगेशन पाइपलाइन का लचीलापन $lookup और $match से परे फैला हुआ है। $unwind (सरणियों को विघटित करने के लिए), $group (डेटा को एकत्रित करने के लिए), और $sort (परिणामों को क्रमबद्ध करने के लिए) जैसे चरणों को जटिल डेटा परिवर्तनों के लिए शामिल किया जा सकता है। उदाहरण के लिए, प्रत्येक ग्राहक के कुल खर्च की गणना करने के लिए:


db.customers.aggregate([
  {
    $lookup: { /* ... (ऊपर के समान $lookup) ... */ }
  },
  { $unwind: "$orders" },
  {
    $group: {
      _id: "$_id",
      name: { $first: "$name" },
      totalSpent: { $sum: "$orders.amount" }
    }
  }
])

प्रदर्शन का अनुकूलन

बड़े डेटासेट के लिए, प्रदर्शन सर्वोपरि है। localField और foreignField में उपयोग किए जाने वाले फ़ील्ड को अनुक्रमित करना महत्वपूर्ण है। कुशल अनुक्रमण जॉइन ऑपरेशन को काफी तेज करता है। अपनी एकत्रीकरण पाइपलाइन का विश्लेषण करें ताकि अनावश्यक चरणों को समाप्त किया जा सके और क्वेरी दक्षता को अनुकूलित किया जा सके।

अक्सर पूछे जाने वाले प्रश्न

प्रश्न: क्या होगा यदि field1 या field2 में कई मिलान हो सकते हैं? उत्तर: $lookup results सरणी में सभी मिलान दस्तावेज़ वापस करेगा। प्रत्येक को व्यक्तिगत रूप से संसाधित करने के लिए $unwind का उपयोग करें।

प्रश्न: क्या मैं एक RIGHT JOIN कर सकता हूँ? उत्तर: सीधे नहीं। $lookup में संग्रहों को उलट दें और अनुपलब्ध दस्तावेज़ों को तदनुसार संभालें।

प्रश्न: विशाल संग्रहों के साथ प्रदर्शन को कैसे संभालना है? उत्तर: अनुक्रमण आवश्यक है। प्रसंस्करण को कम करने के लिए अपनी पाइपलाइन को अनुकूलित करें।

प्रातिक्रिया दे

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *