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

MongoDB-এ ফিল্ড অনুযায়ী ডকুমেন্ট গ্রুপ করা ($group এবং $project)

MongoDB-এ একাধিক ডকুমেন্টকে একটি নির্দিষ্ট ফিল্ড (যেমন id এবং Name) অনুযায়ী গ্রুপ করে, সম্পর্কিত ডেটা (যেমন CountryName) একটি অ্যারে হিসেবে সংগ্রহ করতে $group এবং $project স্টেজ ব্যবহার করা হয়।

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

> db.demo540.insertOne({id:1,"Name":"Chris","CountryName":"US"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8ca368ef4dcbee04fbbc0e") }
> db.demo540.insertOne({id:1,"Name":"Chris","CountryName":"UK"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8ca36bef4dcbee04fbbc0f") }
> db.demo540.insertOne({id:1,"Name":"Chris","CountryName":"AUS"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8ca370ef4dcbee04fbbc10") }

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

> db.demo540.find();

আউটপুট:

{ "_id" : ObjectId("5e8ca368ef4dcbee04fbbc0e"), "id" : 1, "Name" : "Chris", "CountryName" : "US" }
{ "_id" : ObjectId("5e8ca36bef4dcbee04fbbc0f"), "id" : 1, "Name" : "Chris", "CountryName" : "UK" }
{ "_id" : ObjectId("5e8ca370ef4dcbee04fbbc10"), "id" : 1, "Name" : "Chris", "CountryName" : "AUS" }

Aggregation কোয়েরি: id এবং Name অনুযায়ী গ্রুপ করে CountryName সংগ্রহ

> var query = [
    {
      "$group": {
        "_id": {
          "id": "$id",
          "Name": "$Name"
        },
        "details": {
          "$push": {
            "CountryName": "$CountryName"
          }
        }
      }
    },
    {
      "$project": {
        "_id": "$_id.id",
        "Name": "$_id.Name",
        "details": 1
      }
    }
];
> db.demo540.aggregate(query).pretty();

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

  1. $group স্টেজ: id এবং Name ফিল্ডগুলোকে কম্বাইন করে গ্রুপ কী (_id) তৈরি করে। $push ব্যবহার করে প্রতিটি গ্রুপের CountryName গুলো একটি অ্যারে (details)তে সংগ্রহ করে।
  2. $project স্টেজ: আউটপুট ফরম্যাট করে। _id অবজেক্ট থেকে id এবং Name বের করে টপ-লেভেল ফিল্ড বানায়, details অ্যারেটি রেখে দেয়।

আউটপুট

{
    "details" : [
        { "Name" : "Chris", "CountryName" : "US" },
        { "Name" : "Chris", "CountryName" : "UK" },
        { "Name" : "Chris", "CountryName" : "AUS" }
    ],
    "_id" : 1,
    "Name" : "Chris"
}

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

  • $group এ _id অবজেক্ট হিসেবে একাধিক ফিল্ড কম্বাইন করা যায়।
  • $push গ্রুপের সব ডকুমেন্টের নির্দিষ্ট ফিল্ড একত্রিত করে অ্যারে বানায়।
  • $project আউটপুটের কাঠামো (structure) পরিবর্তন করতে ব্যবহৃত হয়।
  1. MongoDB-এ নির্দিষ্ট ফিল্ডের সব ডকুমেন্টের মান যোগ করা (aggregate $sum)

  2. MongoDB Aggregation-এ নির্দিষ্ট ফিল্ড মান অনুযায়ী ডকুমেন্ট ফিল্টার করা

  3. MongoDB-তে find()-এ প্রজেকশন দিয়ে _id ফিল্ড হাইড করা

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