If tutorials available on this website are helpful for you, please whitelist this website in your ad blocker😭 or Donate to help us ❤️ pay for the web hosting to keep the website running.
जैसा कि आप जानते ही हैं कि MongoDB कोई relational database नहीं है , जिसका मतलब है इसमें हम SQL की तरह JOIN queries नहीं होती हैं , लेकिन हाँ $lookup
operator है जिसका use करके हम left join
apply कर सकते हैं।
इस topic में हम $lookup
के बारे में detail में समझेंगे।
MongoDB में , $lookup
एक powerful aggregation stage है जो दो collections के बीच एक LEFT JOIN जैसा काम करता है . इसका use एक collection के documents को दुसरे collection के documents से जोड़ने के लिए किया जाता है।
जिसे एक reference field से दुसरे collection के documents को retrieve करने के लिए होता है। इसे हम aggregate() Method में use करते हैं।
{ $lookup: { from : collection, localField : field in current document, foreignField: field from the "from" collection, as: output array field } }
Syntax Explanation
from
: ये parameter वो collection है जिससे आप join करना चाहते हैं।
localField
: ये parameter current documents के field का नाम है , जो "from"
document में stored है।
foreignField
: ये parameter from collection के documents के field का नाम है जिसमे आपने localField
की value store की है।
as
: ये parameter एक new array field specify करता है जिसमे join किये गए data stored होंगे , मतलब joined collection का data आपको इसी नाम से access होगा।
●●●
$lookup
को और अच्छे से समझने के लिए एक example देख लेते हैं।
Suppose एक "orders"
collection और एक "products"
collection को join करना है जिसमे कुछ इस तरह से data stored है।
orders collection :
[ { _id: 1, order_number: "ORD001", product_id: 101 }, { _id: 2, order_number: "ORD002", product_id: 102 } ]
products collection :
[ { _id: 101, product_name: "Laptop" }, { _id: 102, product_name: "Mobile Phone" } ]
हम orders collection से data fetch करेंगे इसलिए $lookup
का use orders
collections के product_id और products
collections के _id
field को join करने के लिए करेंगे।
db.orders.aggregate([ { $lookup: { from : "products", localField : "product_id", foreignField : "_id", as : "ordered_products" } } ])
Output :
[ { _id: 1, order_number: "ORD001", product_id: 101, ordered_products: [ { _id: 101, product_name: "Laptop" } ] }, { _id: 2, order_number: "ORD002", product_id: 102, ordered_products: [ { _id: 102, product_name: "Mobile Phone" } ] } ]
ऊपर दिए गए example की SQL equivalent query कुछ ऐसी होगी।
SELECT orders._id, orders.order_number, products.product_name FROM orders INNER JOIN products ON orders.product_id = products._id;
●●●
$unwind
MongoDB aggregation stage का use arrays को expand (unfold) करने के लिए किया जाता है।
ये एक array field को documents के रूप में अलग - अलग documents में return करता है , इससे आप array के हर element के लिए एक नया new document बनाते हैं।
ऊपर दिए गए example का output में आपको product की detail एक array में मिली है , लेकिन अगर आपको ये detail orders detail की तरह में नहीं चाहिए तो आपको $unwind
का use करना पड़ेगा।
db.orders.aggregate([ { $lookup: { from: "products", localField: "product_id", foreignField: "_id", as: "product" } }, { $unwind: "$product" // Convert the "product" array to a single document. }, { $project: { _id: 1, order_number: 1, product_name: "$product.product_name" // Extract the product name. } } ])
अब output कुछ इस तरह से होगा।
[ { _id: 1, order_number: "ORD001", product_name: "Laptop" }, { _id: 2, order_number: "ORD002", product_name: "Mobile Phone" } ]
●●●
जैसा कि आपने अभी पढ़ा कि $lookup , SQL Left Join की तरह work करता है , लेकिन कई जगह पर Inner Join की भी जरूरत पड़ सकती है।
$lookup
को Inner Join की तरह use करने के लिए आपके $match Stage में एक condition add करने पड़ेगी।
Example
db.orders.aggregate([ { $lookup: { from: "products", localField: "product_id", foreignField: "_id", as: "ordered_products" } }, { $unwind: "$ordered_products" // Unwind the "ordered_products" array }, { $match: { "ordered_products.product_name": { $exists: true } } // Match only the documents where "product_name" exists } ])
तो कुछ इस तरह से MongoDB में $lookup
work करता है , और I hope आपको शायद इसके बारे में थोड़ा समझ आया होगा ~ :)
●●●