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

MongoDB Aggregation-এ ডুপ্লিকেট নামের কাউন্ট ও সাবজেক্ট লিস্ট বের করা

MongoDB-এ একটি ডকুমেন্টের ভেতরের অ্যারেতে থাকা ডুপ্লিকেট Name ফিল্ডের কাউন্ট এবং সংশ্লিষ্ট Subject লিস্ট বের করতে $unwind, $group (with $push), এবং $project (with $size) ব্যবহার করা হয়।

উদাহরণ: কালেকশন ও ডেটা তৈরি

> db.demo558.insertOne({
    _id: 100,
    CountryCode: 101,
    details: [
      { Name: "Chris", Subject: "MySQL" },
      { Name: "Chris", Subject: "MongoDB" },
      { Name: "Chris", Subject: "Java" },
      { Name: "Bob", Subject: "Python" },
      { Name: "Bob", Subject: "Java" }
    ]
});
{ "acknowledged" : true, "insertedId" : 100 }

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

> db.demo558.find();

আউটপুট:

{ "_id" : 100, "CountryCode" : 101, "details" : [
    { "Name" : "Chris", "Subject" : "MySQL" },
    { "Name" : "Chris", "Subject" : "MongoDB" },
    { "Name" : "Chris", "Subject" : "Java" },
    { "Name" : "Bob", "Subject" : "Python" },
    { "Name" : "Bob", "Subject" : "Java" }
] }

Aggregation কোয়েরি: নাম অনুযায়ী কাউন্ট ও সাবজেক্ট লিস্ট

> db.demo558.aggregate([
    { $unwind: "$details" },
    { $group: {
        _id: "$details.Name",
        NameCount: { $sum: 1 },
        Subject: { $push: "$details.Subject" }
    }},
    { $project: {
        NameCount: 1,
        SubjectCount: { $size: "$Subject" }
    }}
]).pretty()

কোয়েরির ব্যাখ্যা

  1. $unwind: "$details" — অ্যারে ফ্ল্যাটেন করে।
  2. $group — details.Name অনুযায়ী গ্রুপ করে:
    • NameCount: { $sum: 1 } — প্রতিটি নামের কাউন্ট।
    • Subject: { $push: "$details.Subject" } — সব সাবজেক্ট একটি অ্যারেতে সংগ্রহ করে।
  3. $project — আউটপুট ফরম্যাট:
    • NameCount: 1 — কাউন্ট রাখুন।
    • SubjectCount: { $size: "$Subject" } — সাবজেক্ট অ্যারের সাইজ (লেন্থ) বের করে।

আউটপুট

{ "_id" : "Bob", "NameCount" : 2, "SubjectCount" : 2 }
{ "_id" : "Chris", "NameCount" : 3, "SubjectCount" : 3 }

মূল পয়েন্টসমূহ

  • $push গ্রুপের সব মান অ্যারেতে সংগ্রহ করে (ডুপ্লিকেট রেখে)।
  • $addToSet ব্যবহার করলে ডুপ্লিকেট বাদ দিয়ে ইউনিক মানগুলোই রাখবে।
  • $size অ্যারের লেন্থ বের করে (শুধু $project-এ কাজ করে, $group-এ নয়)।
  • $unwind বড় অ্যারে বা বড় ডেটাসেটে পারফরম্যান্স প্রভাবিত করতে পারে।
  1. MongoDB-এ নির্দিষ্ট ফিল্ডের সব ডকুমেন্টের মান যোগ করা (aggregate $sum)

  2. MongoDB-এ একাধিক ফিল্ড দিয়ে গ্রুপিং এবং ডুপ্লিকেট কাউন্ট

  3. MongoDB-তে $slice ব্যবহার করে ফিল্ডের রিটার্নিং ভ্যালু লিমিট করা

  4. MySQL-এ GROUP BY COUNT(*) ব্যবহার করে একক কলামে ডুপ্লিকেট মানların ঘনত্ব বের করা