অ্যারে এলিমেন্ট থেকে ফিল্ড রিমুভ: জাভাস্ক্রিপ্ট লুপ
MongoDB-এ অ্যারে ফিল্ডের প্রতিটি এলিমেন্ট (অবজেক্ট) থেকে নির্দিষ্ট ফিল্ড মুছে ফেলতে সার্ভার-সাইড জাভাস্ক্রিপ্ট (forEach) এবং delete ব্যবহার করা হয়। এটি অ্যাগ্রিগেশন বা আপডেট অপারেটর দিয়ে সরাসরি সম্ভব নয় (MongoDB 5.0+ এ $unset অ্যারেতে কাজ করে)।
নমুনা ডেটা তৈরি
> db.demo464.insertOne({
"id": "101",
"details": [
{ "Name": "Chris" },
{ "Name": "David" }
]
})
সমস্ত ডকুমেন্ট দেখানো
> db.demo464.find()
আউটপুট:
{ "_id": ObjectId("..."), "id": "101", "details": [{ "Name": "Chris" }, { "Name": "David" }] }
অ্যারে এলিমেন্ট থেকে Name ফিল্ড ডিলিট করার কোয়েরি
> db.demo464.find({ id: "101" }).forEach(function(mongoDocument) {
var details = mongoDocument.details;
for (var j = 0; j < details.length; ++j) {
var array = details[j];
delete array["Name"];
}
db.demo464.save(mongoDocument);
});
ফলাফল:
{ "_id": ObjectId("..."), "id": "101", "details": [{ }, { }] }
ব্যাখ্যা
find().forEach(): কোরসার থেকে প্রতিটি ডকুমেন্ট প্রক্রিয়া করেforলুপ: অ্যারে এলিমেন্টগুলোতে যেতেdelete array["Name"]: জাভাস্ক্রিপ্ট ডিলিট অপারেটর দিয়ে ফিল্ড মুছে ফেলাsave(): মডিফাইড ডকুমেন্ট সেভ করে (আপসার্ট আচরণ)
⚠️ সতর্কতা ও আধুনিক বিকল্প
- এই পদ্ধতিটি ধীর, লোকে 호ল্ড করে, এবং
save()ডিপ্রিকেটেড - MongoDB 5.0+:
updateMany({}, { $unset: { "details.$[].Name": "" } })ব্যবহার করুন (অ্যাল ফিল্টার দিয়ে সব এলিমেন্টে প্রয়োগ) - MongoDB 4.2+: অ্যাগ্রিগেশন পাইপলাইন আপডেট (
updateManyয়িতথ[{ $set: { details: { $map: { input: "$details", in: { $mergeObjects: ["$$this", { Name: "$$REMOVE" }] } } } }] )
প্রোডাকশনে আধুনিক আপডেট পাইপলাইন ব্যবহার করুন।