Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Dùng $pull xóa tài liệu trong mảng MongoDB

Để 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 cho update({}, ..., {multi:true}).
  • $pull xóa tất cả phần tử khớp điều kiện trong mảng.