দুই কলেকশন 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" } ])