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

MongoDB-এ অ্যারে টাইপ ফিল্ডের মান বাদ দেওয়া (এক্সক্লুড)


অ্যারে এলিমেন্ট থেকে ফিল্ড রিমুভ: জাভাস্ক্রিপ্ট লুপ

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" }] } } } }] )

প্রোডাকশনে আধুনিক আপডেট পাইপলাইন ব্যবহার করুন।

  1. MongoDB কোয়ারী: আইডি যদি ডকুমেন্ট ফিল্ড অ্যারে মানের সমান হয় তবে বাদ দেওয়া

  2. MongoDB-তে অ্যারে পুশ করার পদ্ধতি

  3. MongoDB-এ অ্যারেতে এলিমেন্ট যুক্ত করার পদ্ধতি

  4. MongoDB-এ ডকুমেন্ট থেকে অ্যারে ভ্যালু ডিলিট করা