विषयसूची
- लेफ्ट जॉइन और MongoDB का दृष्टिकोण समझना
- $lookup ऑपरेटर में महारत हासिल करना
- फ़िल्टरिंग के साथ परिणामों को परिष्कृत करना
- उन्नत एकत्रीकरण तकनीकें
- प्रदर्शन का अनुकूलन
- अक्सर पूछे जाने वाले प्रश्न
लेफ्ट जॉइन और 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
में संग्रहों को उलट दें और अनुपलब्ध दस्तावेज़ों को तदनुसार संभालें।
प्रश्न: विशाल संग्रहों के साथ प्रदर्शन को कैसे संभालना है? उत्तर: अनुक्रमण आवश्यक है। प्रसंस्करण को कम करने के लिए अपनी पाइपलाइन को अनुकूलित करें।