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

MongoDB-এ দুই লিস্ট অ্যাগ্রিগেট করা যদি কমপক্ষে একটি এলিমেন্ট মিলে


সাধারণ এলিমেন্ট পেয়ে লিস্ট মylated করা

MongoDB-এ একাধিক ডকুমেন্টের অ্যারে ফিল্ড থেকে কমপক্ষে একটি সাধারণ এলিমেন্ট থাকলে তাদের আইডি একসাথে গ্রুপ করতে জটিল অ্যাগ্রিগেশন পাইপলাইন ব্যবহার করা হয়।

নমুনা ডেটা তৈরি

> db.demo456.insertOne({ _id: 101, StudentName: ["Chris", "David"] })
> db.demo456.insertOne({ _id: 102, StudentName: ["Mike", "Sam"] })
> db.demo456.insertOne({ _id: 103, StudentName: ["John", "Jace"] })
> db.demo456.insertOne({ _id: 104, StudentName: ["Robert", "John"] })

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

> db.demo456.find()

আউটপুট:

{ "_id": 101, "StudentName": ["Chris", "David"] }
{ "_id": 102, "StudentName": ["Mike", "Sam"] }
{ "_id": 103, "StudentName": ["John", "Jace"] }
{ "_id": 104, "StudentName": ["Robert", "John"] }

সাধারণ এলিমেন্ট পেয়ে গ্রুপ করার জটিল কোয়েরি

> db.demo456.aggregate([
    { $unwind: "$StudentName" },
    { $group: { _id: "$StudentName", combine: { $addToSet: "$_id" }, size: { $sum: 1 } } },
    { $match: { size: { $gt: 1 } } },
    { $project: { _id: 1, combine: 1, size: 1, combine1: "$combine" }},
    { $unwind: "$combine" },
    { $unwind: "$combine1" },
    { $group: { _id: "$combine", l: { $first: "$_id" }, size: { $sum: 1 }, set: { $addToSet: "$combine1" }}},
    { $sort: { size: 1 }},
    { $group: { _id: "$l", combineIds: { $last: "$set" }, size: { $sum: 1 }}},
    { $match: { size: { $gt: 1 }}}
])

ফলাফল:

{ "_id": "John", "combineIds": [103, 104], "size": 2 }

ব্যাখ্যা

  1. $unwind: StudentName অ্যারে বিচ্ছিন্ন করে
  2. প্রথম $group: প্রতিটি নামের জন্য কোন ডকুমেন্টগুলো আছে (combine) এবং কয়টি (size)
  3. $match size > 1: শুধু যেসব নাম একাধিক ডকুমেন্টে আছে তাদের রাখে
  4. বাকি স্টেপগুলো: সেই সাধারণ নাম শেয়ার করা ডকুমেন্ট পেয়ারগুলো খুঁজে বের করে এবং ফাইনাল গ্রুপ তৈরি করে

ফলাফল: "John" নামটি ১০৩ এবং ১০৪ নম্বর ডকুমেন্টে আছে, তাই সেটি ফলাফলে আসেছে।

সতর্কতা: এটি শিক্ষামূলক উদাহরণ। বাস্তব অ্যাপে গ্রাফ অ্যালগরিদম বা অ্যাপ্লিকেশন লেভেলে করা ভালো।

  1. MongoDB-এ অ্যারে থেকে এলিমেন্ট মুছে ফেলা ($pull অপারেটর)

  2. সি শার্পে একই foreach স্টেটমেন্টে দুটি লিস্ট বা অ্যরে ইটারেট করা

  3. C#-এ দুটি লিস্টে কমন এলিমেন্ট খুঁজে বের করা

  4. পাইথন প্রোগ্রাম: দুটি লিস্টে কমপক্ষে একটি কমন এলিমেন্ট আছে কিনা চেক করা