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

MongoDB-এ bulkWrite() ব্যবহার করে অ্যারে এলিমেন্ট ইনসার্ট বা আপডেট করা (একাধিক শর্তে)

MongoDB-এ জটিল শর্তাবলীতে অ্যারে এলিমেন্ট ইনসার্ট বা আপডেট করতে bulkWrite() মেথড ব্যবহার করা হয়। এটি একসাথে একাধিক অপারেশন (updateOne, updateMany, insertOne, deleteOne, deleteMany, replaceOne) এক্সিকিউট করতে দেয়।

কলেকশন এবং ডকুমেন্ট তৈরি

> db.demo105.insertOne({
...   _id: '101',
...   Name: 'Chris',
...   Details: [
...     { Marks1: 60, Marks2: 70, Marks3: 70 },
...     { Marks1: 70, Marks2: 70, Marks3: 90 }
...   ]
... });
{ "acknowledged" : true, "insertedId" : "101" }

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

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

আউটপুট:

{ "_id" : "101", "Name" : "Chris", "Details" : [ { "Marks1" : 60, "Marks2" : 70, "Marks3" : 70 }, { "Marks1" : 70, "Marks2" : 70, "Marks3" : 90 } ] }

bulkWrite() দিয়ে জটিল আপডেট/ইনসার্ট

৩টি অপারেশন সিরিয়ালে:

  1. Marks2=70 এবং Marks3=70 মিলে যাওয়া এলিমেন্টের Marks3 ৯৬ আপডেট
  2. উপরোক্ত শর্ত নয় এমন এলিমেন্ট থাকলে নতুন এলিমেন্ট পুশ
  3. আপসার্ট (upsert) - ডকুমেন্ট না থাকলে ইনসার্ট
> db.demo105.bulkWrite([
...   { "updateOne": {
...     "filter": {
...       "_id": "101",
...       "Details": { "$elemMatch": { Marks2: 70, Marks3: 70 } }
...     },
...     "update": { "$set": { "Details.$.Marks3": 96 } }
...   }},
...   { "updateOne": {
...     "filter": {
...       "_id": "101",
...       "Details": { "$not": { "$elemMatch": { Marks2: 70, Marks3: 70 } } }
...     },
...     "update": { "$push": { "Details": { Marks1: 94, Marks2: 97, Marks3: 99 } } }
...   }},
...   { "updateOne": {
...     "filter": { "_id": 101 },
...     "update": { "$setOnInsert": { "Details": [ { Marks1: 34, Marks2: 67, Marks3: 87 } ] } },
...     "upsert": true
...   }}
... ]);

ফলাফল

{ "acknowledged" : true, "deletedCount" : 0, "insertedCount" : 0, "matchedCount" : 2, "upsertedCount" : 1, "insertedIds" : {}, "upsertedIds" : { "2" : 101 } }

অপারেশন পর ডকুমেন্ট দেখানো

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

আউটপুট (দুই ডকুমেন্ট তৈরি হয়েছে - আপসার্টের কারণে):

{ "_id" : "101", "Name" : "Chris", "Details" : [ { "Marks1" : 60, "Marks2" : 70, "Marks3" : 96 }, { "Marks1" : 70, "Marks2" : 70, "Marks3" : 90 }, { "Marks1" : 94, "Marks2" : 97, "Marks3" : 99 } ] }
{ "_id" : 101, "Details" : [ { "Marks1" : 34, "Marks2" : 67, "Marks3" : 87 } ] }

গুরুত্বপূর্ণ নোট:

  • bulkWrite() অ্যারে আকারে অপারেশন নেয়, প্রতিটিতে updateOne, updateMany, insertOne, deleteOne, deleteMany, replaceOne থাকতে পারে
  • ordered: true (ডিফল্ট) - সিরিয়াল এক্সিকিউশন, প্রথম এরর হলে রুক जायेगा
  • ordered: false - প্যারালেল এক্সিকিউশন, এরর হলে বাকিগুলো চলবে
  • $setOnInsert - শুধু আপসার্টের সময় (নতুন ডকুমেন্ট তৈরি হলে) প্রয়োগ হয়

সতর্কতা: উদাহরণে _id: "101" (স্ট্রিং) এবং _id: 101 (নাম্বার) দুটি আলাদা মান হিসেবে বিবেচিত হয়েছে, ফলে আপসার্টে নতুন ডকুমেন্ট তৈরি হয়েছে। টাইপ কনসিস্টেন্সি রক্ষা করুন।

  1. টেবিল না থাকলে তৈরি করে একই কোয়েরিতে রেকর্ড ইনসার্ট করার MySQL পদ্ধতি

  2. MySQL-এ WHERE ক্লজে একাধিক শর্ত দিয়ে আপডেট করা

  3. MySQL-এ NOT IN ক্লজ ব্যবহার করে নির্দিষ্ট মান বাদ দিয়ে ডেটা বের করা

  4. The specified service does not exist as an installed service, 0x80070424 এরর ফিক্স