প্রথমে দুইটি কালেকশন নিয়ে নেই,
একটি salim1 =
{
"_id": ObjectId("646f441324e5cc15f7f1ee0c"),
"name": "salim al sazu",
"email": "sazusalim@gmail.com",
"class": "X"
}
আরেকটি salim2 =
{
"_id": ObjectId("646f485a24e5cc15f7f1ee10"),
"userEmail": "sazusalim@gmail.com",
"roll": "546545423",
"marks": {
"bangla": 100
}
}
এদের উপর $lookup চালাবো ।
একটা ডাটাবেস থেকে আরেকটা ডাটাবেসে কোন একটা ফিক্সড প্রপার্টির মাধ্যমে কানেক্ট করে যখন অন্যান্য ডাটা গুলো নিয়ে আসা হয় তখন লুক আপ বলে।
যেমনঃ আমরা ইমেল দিয়ে তা করতে পারি।
এই জিনিসটা আমরা খুব সহজে এগ্রিগেট এর মাধ্যমে করতে পারি। প্রথমে //db.salim1.aggregate([]) নিয়ে এর ভিতর { $match:{}} নিবো, কারণ মেইল দিয়ে তা ম্যাচ করাবো।
এখন আমাকে {$lookup: {}} চালাতে হবে ।
লুক আপ এর ভিতর প্রথমে from: "salim2" কালেকশন নাম দিবো, যে কালেকশন থেকে আমি ডাটা নিয়ে আসবো।
তারপর যে কালেকশনের উপর এগ্রিগেট চালানো হয়েছে সেই কালেকশনের email প্রপার্টি হবে localField আর অন্য আরেকটি কালেকশন থেকে অর্থাৎ “salim2” থেকে যে ডাটা নিয়ে আসতেছি তার ইমেল প্রাপার্টি হবে foreignField । এর প্রপার্টি নাম দিবো userEmail বা যা নাম থাকবে সেই নাম দিবো । সর্বশেষে as ব্যবহার হবে কারণ ডাটা গুলো কি নামে সেভ হবে তাই এখানে "examResult" ব্যবহার করা হয়েছে । examResult নামে একটা প্রাপার্টি এড হবে এবং এর ভিতর ডাটা গুলো অব্জেক্ট থাকবে ।
আমরা চাইলে localField: "_id", এবং foreignField: "userId", ব্যবহার করতে পারি।
যদি $lookup চালাইঃ
///db.salim1.aggregate([
{$match: {email:"sazusalim@gmail.com"}},
{$lookup: {
from: "salim2",
localField: "email",
foreignField: "userEmail",
as: "examResult"
}}
])
রিজেল্ট পাবো এই ভাবেঃ
///{
"_id": ObjectId("646f441324e5cc15f7f1ee0c"),
"name": "salim al sazu",
"email": "sazusalim@gmail.com",
"class": "X",
"examResult": [
{
"_id": ObjectId("646f485a24e5cc15f7f1ee10"),
"email": "sazusalim@gmail.com",
"roll": "546545423",
"marks": {
"bangla": 100
}
}
]
}
ধন্যবাদ !
Top comments (0)