Để xóa phần tử mảng theo chỉ mục trong MongoDB, bạn có thể sử dụng kết hợp hai toán tử $unset và $pull. Quy trình bao gồm hai bước: đầu tiên đặt giá trị tại chỉ mục mục tiêu thành null, sau đó loại bỏ các giá trị null khỏi mảng.
Cú pháp
db.tênCollection.update({}, {$unset: {"tênMảng.vịTrí": giáTrịVịTrí}});
db.tênCollection.update({}, {$pull: {"tênMảng": null}});
Ví dụ minh họa
Tạo collection và document mẫu:
> db.xoaPhanTuMang.insertOne({"TenSinhVien": "Larry", "TuoiSinhVien": 23, "MonHocKyThuat": ["C", "C++", "Java", "MongoDB"]});
{ "acknowledged": true, "insertedId": ObjectId("5c6ea4879c4643706aef56d2") }
Hiển thị document ban đầu:
> db.xoaPhanTuMang.find().pretty();
{
"_id": ObjectId("5c6ea4879c4643706aef56d2"),
"TenSinhVien": "Larry",
"TuoiSinhVien": 23,
"MonHocKyThuat": ["C", "C++", "Java", "MongoDB"]
}
Xóa phần tử tại chỉ mục 3 (phần tử "MongoDB"):
> db.xoaPhanTuMang.update({}, {$unset: {"MonHocKyThuat.3": 1}});
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
> db.xoaPhanTuMang.update({}, {$pull: {"MonHocKyThuat": null}});
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
Kiểm tra kết quả:
> db.xoaPhanTuMang.find().pretty();
{
"_id": ObjectId("5c6ea4879c4643706aef56d2"),
"TenSinhVien": "Larry",
"TuoiSinhVien": 23,
"MonHocKyThuat": ["C", "C++", "Java"]
}
Kết quả cho thấy phần tử tại chỉ mục 3 ("MongoDB") đã bị xóa khỏi mảng.