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

MongoDB অ্যাগ্রিগেশন: একাধিক ডকুমেন্টকে অ্যারে সহ একক ডকুমেন্টে কনভার্ট করা

MongoDB-এ একাধিক ডকুমেন্টকে একটি নির্দিষ্ট ফিল্ড (যেমন id) দিয়ে গ্রুপ করে একটি সিঙ্গেল ডকুমেন্টে রূপান্তর করতে, যেখানে গ্রুপ করা ডকুমেন্টগুলো একটি অ্যারেতে থাকে, অ্যাগ্রিগেশন পাইপলাইনে $group এবং $push ব্যবহার করা হয়।

নমুনা কালেকশন তৈরি

> db.demo248.insertOne({ "id": 101, "Name": "Chris", "Age": 21, "CountryName": "US" });
{ "acknowledged": true, "insertedId": ObjectId("5e46b6651627c0c63e7dba6d") }

> db.demo248.insertOne({ "id": 101, "Name": "Bob", "Age": 22, "CountryName": "UK" });
{ "acknowledged": true, "insertedId": ObjectId("5e46b6741627c0c63e7dba6e") }

> db.demo248.insertOne({ "id": 102, "Name": "Mike", "Age": 20, "CountryName": "AUS" });
{ "acknowledged": true, "insertedId": ObjectId("5e46b6811627c0c63e7dba6f") }

ডকুমেন্টগুলো দেখানো

> db.demo248.find();

আউটপুট:

{ "_id": ObjectId("5e46b6651627c0c63e7dba6d"), "id": 101, "Name": "Chris", "Age": 21, "CountryName": "US" }
{ "_id": ObjectId("5e46b6741627c0c63e7dba6e"), "id": 101, "Name": "Bob", "Age": 22, "CountryName": "UK" }
{ "_id": ObjectId("5e46b6811627c0c63e7dba6f"), "id": 102, "Name": "Mike", "Age": 20, "CountryName": "AUS" }

একাধিক ডকুমেন্টকে অ্যারে সহ একক ডকুমেন্টে কনভার্ট

> db.demo248.aggregate([
  { 
    $group: { 
      _id: "$id", 
      details: { 
        $push: { 
          id: "$id", 
          Name: "$Name", 
          Age: "$Age", 
          CountryName: "$CountryName" 
        } 
      } 
    } 
  }
]);

ফলাফল

{ "_id": 102, "details": [ { "id": 102, "Name": "Mike", "Age": 20, "CountryName": "AUS" } ] }
{ "_id": 101, "details": [ 
  { "id": 101, "Name": "Chris", "Age": 21, "CountryName": "US" }, 
  { "id": 101, "Name": "Bob", "Age": 22, "CountryName": "UK" } 
] }

ব্যাখ্যা:

  • $group: { _id: "$id" } - id ফিল্ড দিয়ে গ্রুপিং (১০১ এবং ১০২ - দুটি গ্রুপ)।
  • $push - প্রতিটি গ্রুপের ডকুমেন্টগুলোকে একটি অ্যারেতে (details) পুশ করে।
  • $push-এর ভেতর অবজেক্ট কনস্ট্রাক্ট করে নির্দিষ্ট ফিল্ডগুলো অন্তর্ভুক্ত করা হয়েছে।
  • আউটপুটে প্রতিটি গ্রুপের জন্য একটি ডকুমেন্ট, যার মধ্যে details অ্যারেতে ওই গ্রুপের সব ডকুমেন্ট।

আউটপুট ফরম্যাট কাস্টোমাইজেশন

db.demo248.aggregate([
  { $group: { _id: "$id", details: { $push: "$$ROOT" } } },
  { $project: { _id: 0, id: "$_id", details: 1 } }
]);

$$ROOT পুরো ডকুমেন্টকে পুশ করে (শুধু নির্দিষ্ট ফিল্ড না)। $project দিয়ে _id কে id নামে রিনেম করা হয়েছে।

ব্যবহারিক উদাহفى: অর্ডার গ্রুপিং

কাস্টমার আইডি অনুযায়ী সব অর্ডার একসাথে দেখাতে এই প্যাটার্ন ব্যবহার করা হয়।

  1. MongoDB-এ অ্যারে এলিমেন্টস সহ নির্দিষ্ট ডকুমেন্ট ফেচ করা

  2. MongoDB-এ অ্যারেতে নির্দিষ্ট মান রিপ্লেস করা (Positional $ ও $set)

  3. MongoDB-এ এমবেডেড ডকুমেন্টের অ্যারে ফিল্টার করা (৩ লেভেল)

  4. MongoDB-এ অ্যারে বিশিষ্ট এক রেকর্ডকে একাধিক রেকর্ডে রূপান্তর করা (নতুন কালেকশনে)