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

MongoDB Aggregation-এ সমষ্টিগতভাবে ইন্টারসেকশন মিলিয়ে ডকুমেন্ট ফিল্টার করা

$group, $match, $all, $elemMatch ব্যবহার করে কম্বাইন্ড ইন্টারসেকশন ফিল্টার

MongoDB Aggregation-এ একটি ফিল্ড (Id1) দিয়ে গ্রুপ করে, সেই গ্রুপে একাধিক নির্দিষ্ট ভ্যালু (Id2: 100 এবং 101) উভয়ই থাকা গ্রুপগুলো ফিল্টার করা যায়।

নমুনা সংগ্রহ তৈরি

> db.demo393.insertOne({ Id1: "1", Name: "Chris", Id2: "100" });
{ "acknowledged" : true, "insertedId" : ObjectId("5e5e6dd522064be7ab44e804") }
> db.demo393.insertOne({ Id1: "1", Name: "Chris", Id2: "101" });
{ "acknowledged" : true, "insertedId" : ObjectId("5e5e6dd522064be7ab44e805") }
> db.demo393.insertOne({ Id1: "3", Name: "Chris", Id2: "100" });
{ "acknowledged" : true, "insertedId" : ObjectId("5e5e6dd522064be7ab44e806") }
> db.demo393.insertOne({ Id1: "3", Name: "Mike", Id2: "101" });
{ "acknowledged" : true, "insertedId" : ObjectId("5e5e6dd522064be7ab44e807") }

সব ডকুমেন্ট দেখানো

> db.demo393.find();

আউটপুট:


Id1 দিয়ে গ্রুপ করে Id2: 100 এবং 101 উভয়ই থাকা গ্রুপ ফিল্টার

> db.demo393.aggregate([
    { "$match": { "Name": "Chris" } },
    { "$group": {
        "_id": "$Id1",
        "docs": { "$push": "$$ROOT" },
        "count": { "$sum": 1 }
    }},
    { "$match": {
        "count": { "$gt": 1 },
        "docs": {
            "$all": [
                { "$elemMatch": { "Id2": "100" } },
                { "$elemMatch": { "Id2": "101" } }
            ]
        }
    }}
])

ফলাফল (Id1="1" গ্রুপে 100 এবং 101 দুটোই আছে):


ব্যাখ্যা: প্রথমে Name="Chris" ফিল্টার, তারপর Id1 দিয়ে গ্রুপ। docs-এ পুরো ডকুমেন্ট পুশ। দ্বিতীয় $match-এ count>1 এবং docs অ্যারেতে $all দিয়ে উভয় Id2 (100 এবং 101) থাকা চেক করা হয়েছে। Id1="3" গ্রুপে শুধু 100 আছে, 101 নেই, তাই বাদ পড়েছে।

  1. MongoDB-এ সাবডকুমেন্ট অ্যারের _id এর সাথে অন্য কালেকশন ম্যাচ করা ($in + distinct)

  2. MongoDB-তে এমবেডেড ডকুমেন্ট কোয়েরি করা (aggregate + $unwind)

  3. MongoDB-তে $elemMatch এবং $and দিয়ে অ্যারে ফিল্ডে একাধিক শর্ত মিলিয়ে ডকুমেন্ট বের করা

  4. MongoDB-এ ফর্মুলা দিয়ে কালেকশনের সব ডকুমেন্টের ফিল্ড আপডেট করা