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

MongoDB-তে $pull ব্যবহার করে অ্যারেতে থাকা ডকুমেন্ট ডিলিট কীভাবে করবেন?

update() + $pull + multi: true

অ্যারে ফিল্ডের মধ্যে থেকে নির্দিষ্ট শর্তে মিলে যাওয়া সাব-ডকুমেন্ট মুছে ফেলার জন্য $pull অপারেটর ব্যবহার করুন। multi: true দিয়ে সব ম্যাচ করা ডকুমেন্টে অ্যাপ্লাই করা যায়।

উদাহরণ: অ্যারে অফ ডকুমেন্টস

> db.deleteDocumentsDemo.insertOne({
    "_id": 100,
    "StudentsDetails": [
        { "StudentId": 1, "StudentName": "John" },
        { "StudentId": 2, "StudentName": "Carol" },
        { "StudentId": 3, "StudentName": "Sam" },
        { "StudentId": 4, "StudentName": "Mike" }
    ]
});
{ "acknowledged" : true, "insertedId" : 100 }

> db.deleteDocumentsDemo.insertOne({
    "_id": 200,
    "StudentsDetails": [
        { "StudentId": 5, "StudentName": "David" },
        { "StudentId": 6, "StudentName": "Ramit" },
        { "StudentId": 7, "StudentName": "Adam" },
        { "StudentId": 8, "StudentName": "Larry" }
    ]
});
{ "acknowledged" : true, "insertedId" : 200 }

StudentName "David" যেই সাব-ডকুমেন্টে আছে, সেটা মুছে ফেলা

> db.deleteDocumentsDemo.update(
    {}, 
    { $pull: { "StudentsDetails": { "StudentName": "David" } } },
    { multi: true }
);
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 1 })

ফাইনাল ডেটা

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

আউটপুট: _id: 200-এর অ্যারেতে থেকে StudentId: 5 (David) মুছে গেছে। _id: 100 অপরিবর্তিত (কারণ David সেখানে ছিল না)।

ব্যাখ্যা

  • {} - সব ডকুমেন্টে অ্যাপ্লাই (empty filter)
  • $pull: { StudentsDetails: { StudentName: "David" } } - StudentsDetails অ্যারেতে StudentName: "David" মিলে যাওয়া এলিমেন্ট মুছে ফেল
  • multi: true - সব ম্যাচ করা ডকুমেন্ট আপডেট (ডিফল্ট false = শুধু প্রথমটি)

আধুনিক সিনট্যাক্স (MongoDB 3.2+): updateMany({}, { $pull: { StudentsDetails: { StudentName: "David" } } })

  1. MongoDB-এ অ্যারে অনুযায়ী ডকুমেন্ট ফিল্টার করা

  2. MongoDB-এ $type অপারেটর ব্যবহার করে টাইপ ভিত্তিক কোয়েরি

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

  4. MongoDB-এ অ্যারেতে ম্যাচ করা অবজেক্টের সংখ্যা অনুযায়ী ডকুমেন্ট খোঁজা ($where / Aggregation)