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