Để xóa phần tử (tài liệu nhúng) khỏi mảng, dùng $pull kết hợp update() với tùy chọn multi: true (cập nhật nhiều tài liệu).
Ví dụ: Collection deleteDocumentsDemo có mảng StudentsDetails chứa đối tượng:
> db.deleteDocumentsDemo.insertOne({
"_id": 100,
"StudentsDetails": [
{ "StudentId": 1, "StudentName": "John" },
{ "StudentId": 2, "StudentName": "Carol" },
{ "StudentId": 3, "StudentName": "Sam" },
{ "StudentId": 4, "StudentName": "Mike" }
]
});
> db.deleteDocumentsDemo.insertOne({
"_id": 200,
"StudentsDetails": [
{ "StudentId": 5, "StudentName": "David" },
{ "StudentId": 6, "StudentName": "Ramit" },
{ "StudentId": 7, "StudentName": "Adam" },
{ "StudentId": 8, "StudentName": "Larry" }
]
});
Xóa tất cả phần tử có StudentName = "David" trong mọi tài liệu:
> db.deleteDocumentsDemo.update(
{},
{ $pull: { "StudentsDetails": { "StudentName": "David" } } },
{ multi: true }
);
WriteResult({ "nMatched": 2, "nUpserted": 0, "nModified": 1 })
Kết quả: Phần tử David (StudentId:5) trong tài liệu _id:200 bị xóa. Tài liệu _id:100 không thay đổi (không có David).
Lưu ý:
multi: trueáp dụng cho tất cả tài liệu khớp query (rỗng {} khớp tất cả).- MongoDB 3.2+: Dùng
updateMany()thay choupdate({}, ..., {multi:true}). $pullxóa tất cả phần tử khớp điều kiện trong mảng.