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

MongoDB-এ ObjectId-এর অ্যারে কে এম্বেডেড ডকুমেন্টের অ্যারে-তে রূপান্তর করা ($map, $out)


MongoDB এগ্রিগেশনে $addFields, $map, $out ব্যবহার করে অ্যারে স্ট্রাকচার রিশেপ (Reshape) করা

MongoDB-এ একটি অ্যারে-র এলিমেন্টগুলোকে নতুন স্ট্রাকচার্ড অবজেক্ট-এ রূপান্তর করতে (যেমন স্ট্রিং অ্যারে কে অবজেক্ট অ্যারে-তে) $map অপারেটর ব্যবহার করা হয়। $out দিয়ে ফলাফলটি আবার কালেকশনে লিখা যায়।

১. কালেকশন ও নমুনা ডেটা তৈরি

> db.demo343.insertOne({
  _id: 101,
  UserName: "Chris",
  details: [ {"Name":"John"}, {"Name":"David"} ]
});
{ "acknowledged" : true, "insertedId" : 101 }

২. আপডেটের আগে ডকুমেন্ট

> db.demo343.find().pretty();

আউটপুট:

{ "_id" : 101, "UserName" : "Chris", "details" : [ { "Name" : "John" }, { "Name" : "David" } ] }

৩. এগ্রিগেশন কোয়েরি: details অ্যারে-র প্রতিটি এলিমেন্টকে {Name: } ফরম্যাটে রূপান্তর

> db.demo343.aggregate([
  { $addFields: {
      details: { $map: {
        input: "$details",
        in: { Name: "$$this" }
      }}
  }},
  { $out: "demo343" }
])

ব্যাখ্যা:

  • $map - details অ্যারে-র প্রতিটি এলিমেন্ট ($$this) প্রসেস করে।
  • in: { Name: "$$this" } - পুরো এলিমেন্টকে Name ফিল্ডের ভেতরে রাখে।
  • $out: "demo343" - ফলাফলটি একই কালেকশনে ওভাররাইট করে লিখে (সাবধানতা: মূল ডেটা হারাতে পারে)।

৪. রূপান্তরিত ডকুমেন্ট

> db.demo343.find().pretty();

আউটপুট:

{ "_id" : 101, "UserName" : "Chris", "details" : [ { "Name" : { "Name" : "John" } }, { "Name" : { "Name" : "David" } } ] }

এখন প্রতিটি এলিমেন্ট হলো {Name: {Name: "John"}} - অর্থাৎ নেস্টেড লেভেল বেড়ে গেছে। টাইটেল অনুযায়ী ObjectId অ্যারে-কে এম্বেডেড ডকুমেন্ট-এ রূপান্তর করতে হলে in: { ObjectIdField: "$$this" } ফরম্যাট ব্যবহার করতাম।


  1. MongoDB এগ্রিগেশন: এমবেডেড ডকুমেন্টের অ্যারে প্যারেন্টে আনা এবং কী/ভ্যালু পরিবর্তন

  2. PHP-তে অ্যারের প্রথম এলিমেন্ট পেতে

  3. C#-এ লিস্টকে অ্যারে কনভার্ট করা (ToArray)

  4. C#-এ ২D অ্যারে ১D অ্যারেতে কনভার্ট করা (Convert 2D to 1D Array)