MongoDB-এ ডুপ্লিকেট রেকর্ড প্রতিরোধ করতে ইউনিক ইন্ডেক্স (unique: true) তৈরি করে upsert: true অপশন সহ insert() বা update() ব্যবহার করা হয়। ইউনিক ইন্ডেক্স একই ভ্যালু দुबারা ইনসার্ট না দেয়।
ইউনিক ইন্ডেক্স তৈরি এবং ইনসার্ট
> db.insertWithoutDuplicateDemo.createIndex(
{ "StudentFirstName": 1 },
{ unique: true }
);
{ "createdCollectionAutomatically": true, "numIndexesBefore": 1, "numIndexesAfter": 2, "ok": 1 }
> db.insertWithoutDuplicateDemo.insert({ "StudentFirstName": "Chris" }, { upsert: true });
WriteResult({ "nInserted": 1 })
> db.insertWithoutDuplicateDemo.insert({ "StudentFirstName": "David" }, { upsert: true });
WriteResult({ "nInserted": 1 })
> db.insertWithoutDuplicateDemo.insert({ "StudentFirstName": "Chris" }, { upsert: true });
WriteResult({
"nInserted": 0,
"writeError": {
"code": 11000,
"errmsg": "E11000 duplicate key error collection: test.insertWithoutDuplicateDemo index: StudentFirstName_1 dup key: { : \"Chris\" }"
}
})
> db.insertWithoutDuplicateDemo.insert({ "StudentFirstName": "Bob" }, { upsert: true });
WriteResult({ "nInserted": 1 })
ফলাফল যাচাই
> db.insertWithoutDuplicateDemo.find().pretty();
আউটপুট:
{ "_id": ObjectId("5e064405150ee0e76c06a054"), "StudentFirstName": "Chris" }
{ "_id": ObjectId("5e064410150ee0e76c06a055"), "StudentFirstName": "David" }
{ "_id": ObjectId("5e06441f150ee0e76c06a057"), "StudentFirstName": "Bob" }
ব্যাখ্যা:
createIndex(..., { unique: true })-StudentFirstNameফিল্ডে ইউনিক ইন্ডেক্স তৈরি করে।upsert: true- ডকুমেন্ট না থাকলে ইনসার্ট করে, থাকলে আপডেট করে (এখানে শুধু ইনসার্ট হয়)।- তৃতীয় ইনসার্টে "Chris" ডুপ্লিকেট হওয়ায়
E11000এরর দিয়ে রিজেক্ট হয়েছে। - শেষে ৩টি অনন্য রেকর্ড রয়েছে।
আধুনিক পদ্ধতি: updateOne with upsert
db.insertWithoutDuplicateDemo.updateOne(
{ "StudentFirstName": "NewName" },
{ $setOnInsert: { "StudentFirstName": "NewName" } },
{ upsert: true }
);
$setOnInsert শুধু ইনসার্টের সময় সেট হয়, আপডেটের সময় নয়। এটি আরও নিরাপদ।