কম্পিউটার টিউটোরিয়াল

MongoDB-এ MySQL UNION-এর মত দুই কলেকশন জয়েন করা


দুই কলেকশন Unióন/জয়েন: $lookup + অ্যাগ্রিগেশন

MongoDB-এ SQL UNION-এর মত দুটি কলেকশন একসাথে প্রক্রিয়া করতে $lookup (লেফট জয়েন) এবং অ্যাগ্রিগেশন পাইপলাইন ব্যবহার করা হয়।

প্রথম কলেকশন: demo486

> db.demo486.insertOne({ _id: 1, "Amount": 30, "No": 4 })
> db.demo486.insertOne({ _id: 2, "Amount": 40, "No": 2 })
> db.demo486.insertOne({ _id: 3, "Amount": 60, "No": 6 })

দ্বিতীয় কলেকশন: demo487

> db.demo487.insertOne({ _id: 1, "Price": 10, "No": 4 })
> db.demo487.insertOne({ _id: 2, "Price": 80, "No": 9 })
> db.demo487.insertOne({ _id: 3, "Price": 20, "No": 6 })

UNION-লাইক অ্যাগ্রিগেশন (No ফিল্ডে জয়েন করে Amount+Price সম)

> db.getCollection('demo486').aggregate([
    { $lookup: { from: "demo487", localField: "No", foreignField: "No", as: "demo487" }},
    { $unwind: "$demo487" },
    { $group: {
        _id: { No: "$No" },
        TotalValue: { $sum: { $add: ["$Amount", "$demo487.Price"] }}
    }},
    { $sort: { "_id.No": 1 }},
    { $project: { No: "$_id.No", TotalValue: 1, _id: 0 }}
])

ফলাফল:

{ "TotalValue": 40, "No": 4 }
{ "TotalValue": 80, "No": 6 }

ব্যাখ্যা

  • $lookup: demo486-এর No ফিল্ড দিয়ে demo487-এর No ফিল্ডে জয়েন করে
  • $unwind: লুকআপ ফলাফল অ্যারে বিচ্ছিন্ন করে (ইনার জয়েন ইফেক্ট)
  • $group: No অনুযায়ী গ্রুপ করে Amount + Price সম করে
  • $sort + $project: আউটপুট ফরম্যাট
  • No=2 (demo486) এবং No=9 (demo487) মিলেনি, তাই বাদ
  • No=4: Amount(30)+Price(10)=40, No=6: Amount(60)+Price(20)=80

সতর্কতা

  • এটি UNION নয়, বরং INNER JOIN + GROUP BY
  • সত্যিকারের UNION (দুই কোয়েরির ফলাফল একসাথে স্ট্যাক) MongoDB-এ নেই, অ্যাপ্লিকেশন লেভেলে বা $unionWith (MongoDB 4.4+) দিয়ে করা যায়
  • $unionWith উদাহরণ: db.demo486.aggregate([ { $unionWith: "demo487" } ])
  1. MySQL-এ SELECT IF স্টেটমেন্ট OR অপারেটর সহ ব্যবহার করা

  2. MySQL-এ শর্তসহ TRUNCATE করা যায় কিনা?

  3. MySQL UNION কোয়েরিতে কাউন্ট কীভাবে করবেন?

  4. MySQL-এ WHERE IN vs OR: পারফরম্যান্স তুলনা