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

MongoDB-তে কাস্টম _id দিয়ে আপসার্ট (Upsert) কীভাবে করবেন?

insert() ব্যবহার করে কাস্টম _id

MongoDB-তে insert() দিয়ে কাস্টম _id দিয়ে ডকুমেন্ট ইনসার্ট করা যায়। যদি একই _id দিয়ে আবার ইনসার্ট করা হয়, তবে ডুপ্লিকেট কি এরর (E11000) দেওয়া হয়।

উদাহরণ: কাস্টম _id দিয়ে ইনসার্ট

> db.customIdDemo.insert({ "_id": 1, "StudentName": "John" });
WriteResult({ "nInserted" : 1 })

> db.customIdDemo.insert({ "_id": 1, "StudentName": "Carol" });
WriteResult({ 
    "nInserted" : 0, 
    "writeError" : { 
        "code" : 11000, 
        "errmsg" : "E11000 duplicate key error collection: admin.customIdDemo index: _id_ dup key: { : 1.0 }" 
    } 
})

> db.customIdDemo.insert({ "_id": 2, "StudentName": "Carol" });
WriteResult({ "nInserted" : 1 })

> db.customIdDemo.insert({ "_id": 2, "StudentName": "Carol" });
// আবার E11000 duplicate key error

> db.customIdDemo.insert({ "_id": 3, "StudentName": "Chris" });
WriteResult({ "nInserted" : 1 })

ফাইনাল ডেটা

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

আউটপুট:

{ "_id" : 1, "StudentName" : "John" }
{ "_id" : 2, "StudentName" : "Carol" }
{ "_id" : 3, "StudentName" : "Chris" }

আপসার্ট প্যাটার্ন (update + upsert: true)

যদি "ইনসার্ট যদি না থাকে, আপডেট যদি থাকে" চান, তবে update() সাথে upsert: true ব্যবহার করুন (insert() দিয়ে আপসার্ট হয় না):

db.customIdDemo.update(
    { "_id": 1 }, 
    { $set: { "StudentName": "NewName" } }, 
    { upsert: true }
);

সারসংক্ষেপ: insert() কাস্টম _id নেয় কিন্তু ডুপ্লিকেটে এরর দেয়। আপসার্টের জন্য update({_id:...}, {$set:...}, {upsert:true}) ব্যবহার করুন।

  1. MongoDB-এ নির্দিষ্ট ফিল্ড না থাকা ডকুমেন্ট খুঁজে বের করা

  2. MongoDB-এ ডকুমেন্ট থেকে নির্দিষ্ট ভ্যালু ফিল্টার করা ($filter)

  3. জাভা ব্যবহার করে MongoDB কালেকশনে একাধিক ডকুমেন্ট কীভাবে ইনসার্ট করবেন?

  4. জাভা ব্যবহার করে MongoDB কালেকশনে একটি ডকুমেন্ট কীভাবে ইনসার্ট করবেন?