DEV Community

Salim Al Sazu
Salim Al Sazu

Posted on

Explore $lookup operator

প্রথমে দুইটি কালেকশন নিয়ে নেই,

একটি salim1 =

{
    "_id": ObjectId("646f441324e5cc15f7f1ee0c"),
    "name": "salim al sazu",
    "email": "sazusalim@gmail.com",
    "class": "X"
}
Enter fullscreen mode Exit fullscreen mode

আরেকটি salim2 =

{
    "_id": ObjectId("646f485a24e5cc15f7f1ee10"),
    "userEmail": "sazusalim@gmail.com",
    "roll": "546545423",
    "marks": {
        "bangla": 100
    }
}
Enter fullscreen mode Exit fullscreen mode

এদের উপর $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"
         }}
    ])
Enter fullscreen mode Exit fullscreen mode

রিজেল্ট পাবো এই ভাবেঃ

///{
    "_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
            }
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

ধন্যবাদ !

Top comments (0)