দুটি কলেকশন জয়েন করে শর্তসাপেক্ষ ফিল্টার
MongoDB-এ $lookup ব্যবহার করে দুটি কলেকশন জয়েন করা যায়, এবং $redact বা $match দিয়ে শর্ত অনুযায়ী ফিল্টার করা যায়।
প্রথম কলেকশন: demo446
> db.demo446.insert([
{ "ProductName": "Product1", "ProductPrice": 60 },
{ "ProductName": "Product2", "ProductPrice": 90 }
])
দ্বিতীয় কলেকশন: demo447
> db.demo447.insert([
{ "ProductName": "Product1", "ProductPrice": 40 },
{ "ProductName": "Product2", "ProductPrice": 70 }
])
অ্যাগ্রিগেশন কোয়েরি: demo446-এর প্রাইস > (demo447-এর প্রাইস * rate + 3)
> var rate = 1
> db.demo446.aggregate([
{ $match: { "ProductPrice": { $exists: true }, "ProductName": { $exists: true } } },
{ $lookup: { from: "demo447", localField: "ProductName", foreignField: "ProductName", as: "demo447" }},
{ $unwind: "$demo447" },
{ $redact: {
$cond: [
{ $gt: [ "$ProductPrice", { $add: [ { $multiply: ["$demo447.ProductPrice", rate] }, 3 ] } ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
ফলাফল:
{ "_id": ObjectId("..."), "ProductName": "Product1", "ProductPrice": 60, "demo447": { "_id": ObjectId("..."), "ProductName": "Product1", "ProductPrice": 40 } }
{ "_id": ObjectId("..."), "ProductName": "Product2", "ProductPrice": 90, "demo447": { "_id": ObjectId("..."), "ProductName": "Product2", "ProductPrice": 70 } }
ব্যাখ্যা
$lookup: SQL JOIN-এর মত দুটি কলেকশন একসাথে जोড়ে$unwind: লুকআপের ফলাফল অ্যারে থেকে প্রতিটি এলিমেন্ট আলাদা ডকুমেন্ট বানায়$redact: শর্ত অনুযায়ী ডকুমেন্ট রাখতে ($$KEEP) বা ফেলতে ($$PRUNE) সিদ্ধান্ত নেয়- শর্ত:
ProductPrice > (demo447.ProductPrice * rate + 3)
দুই পণ্যের প্রাইসই শর্ত পূরণ করেছে, তাই দুটোই ফলাফলে আছে।