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

MongoDB-এ বাল্ক (Bulk) অপারেশন দিয়ে অ্যারে এলিমেন্ট একাধিক আপডেট করা

MongoDB-এ বড় পরিমাণে লেখা (write) অপারেশন দক্ষতার সাথে এক্সিকিউট করার জন্য Ordered Bulk Operations (initializeOrderedBulkOp()) ব্যবহার করা হয়। এটি অর্ডার্ড (ordered) বা আনঅর্ডার্ড (unordered) বাল্ক লিখন অপারেশন বিল্ড করতে সাহায্য করে।

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

> db.demo550.insertOne({
    "Name": "Chris",
    "details": [
      { "Marks": 49, "Result": "fail" },
      { "Marks": 58, "Result": "fail" }
    ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8e35bd9e5f92834d7f05e4") }

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

>> db.demo550.find();

আউটপুট:

{ "_id" : ObjectId("5e8e35bd9e5f92834d7f05e4"), "Name" : "Chris", "details" : [
    { "Marks" : 49, "Result" : "fail" },
    { "Marks" : 58, "Result" : "fail" }
] }

বাল্ক অপারেশন দিয়ে "fail" কে "PASS" এ আপডেট করা

> var all = db.demo550.initializeOrderedBulkOp(),
    itr = 0;
> db.demo550.find({ "Name": "Chris", "details.Result": "fail" }).forEach(function(doc) {
    doc.details.filter(function(d) { return d.Result == "fail" }).forEach(function(d) {
      all.find({ "_id": doc._id, "details.Result": "fail" }).updateOne({
        "$set": { "details.$.Result": "PASS" }
      });
      itr++;
      if (itr % 10 == 0) {
        all.execute();
        all = db.demo550.initializeOrderedBulkOp();
      }
    });
    if (itr % 10 != 0)
      all.execute();
});

কোড ব্যাখ্যা

  1. initializeOrderedBulkOp() — অর্ডার্ড বাল্ক অপারেশন বিল্ডার তৈরি করে।
  2. find(...).forEach(...) — শর্তানুসারী ডকুমেন্টে ইটারেট (iterate) করে।
  3. doc.details.filter(...) — ক্লায়েন্ট-সাইডে (mongo shell-এ) অ্যারে ফিল্টার করে "fail" वाले এলিমেন্টগুলো বের করে।
  4. all.find(...).updateOne(...) — বাল্কে আপডেট অপারেশন কিউ (queue) করে। details.$.Result পজিশনাল $ দিয়ে ম্যাচ হওয়া এলিমেন্ট আপডেট করে।
  5. itr % 10 == 0 — প্রতি ১০টি অপারেশনের পর execute() কল করে ব্যাচে এক্সিকিউট করে (মেমরি বাঁচাতে)।
  6. শেষে বাকি অপারেশন execute() দিয়ে রান করা হয়।

আউটপুট

{ "_id" : ObjectId("5e8e35bd9e5f92834d7f05e4"), "Name" : "Chris", "details" : [
    { "Marks" : 49, "Result" : "PASS" },
    { "Marks" : 58, "Result" : "PASS" }
] }

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

  • Ordered Bulk: অপারেশনগুলো ক্রমাগত এক্সিকিউট হয়; একটা ফেইল করলে বাকিগুলো রুকায়।
  • Unordered Bulk: initializeUnorderedBulkOp() — প্যারালাল এক্সিকিউশন, দ্রুত, অর্ডার গ্যারান্টি নেই।
  • বাল্ক অপারেশন নেটওয়ার্ক রাউন্ড-ট্রিপ কমায় এবং থ্রুপুট বাড়ায়।
  • মডার্ন MongoDB (3.2+) এ bulkWrite() মেথড ব্যবহার করা বেস্ট প্র্যাকটিস (বা ড্রাইভার-স্পেসিফিক বাল্ক API)।
  • সতর্কতা: উদাহরণের কোডে d.Result = "fail" (অ্যাসাইনমেন্ট) ব্যবহার করা হয়েছে == (কমপ্যারিজন) বদলে — এটি বাগ। সঠিক: d.Result == "fail"।
  1. MongoDB অগরিগেশনে ম্যাক্স ভ্যালু সহ অ্যারে এলিমেন্ট ম্যাচ এবং গ্রুপ করা

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

  3. MongoDB-তে ডকুমেন্ট এবং সাব-ডকুমেন্ট উদাহরণ ও আপডেট

  4. MySQL-এ AND অপারেটর দিয়ে UPDATE করা