Kết hợp $pull với positional operator $ để xóa phần tử trong mảng lồng nhau.
Tạo collection
> db.pullWithPositionalOperatorDemo.insertOne({
_id: 100,
"StudentDetails": [
{ "StudentId": "STU-1", "StudentFavouriteSubject": ["MongoDB", "Java"] },
{ "StudentId": "STU-2", "StudentFavouriteSubject": ["PHP", "MySQL"] }
]
});
{ "acknowledged": true, "insertedId": 100 }
Hiển thị tài liệu
> db.pullWithPositionalOperatorDemo.find().pretty();
Xóa "MySQL" khỏi StudentFavouriteSubject của sinh viên STU-2
> db.pullWithPositionalOperatorDemo.update({
"StudentDetails": {
$elemMatch: {
"StudentId": "STU-2",
"StudentFavouriteSubject": "MySQL"
}
}
}, {
$pull: { "StudentDetails.$.StudentFavouriteSubject": "MySQL" }
}, {
multi: true
});
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
Kết quả
> db.pullWithPositionalOperatorDemo.find().pretty();
Kết quả (mảng STU-2 chỉ còn PHP):
{
"_id": 100,
"StudentDetails": [
{ "StudentId": "STU-1", "StudentFavouriteSubject": ["MongoDB", "Java"] },
{ "StudentId": "STU-2", "StudentFavouriteSubject": ["PHP"] }
]
}
Giải thích:
$elemMatchtrong query khớp phần tử mảng STU-2 có chứa "MySQL"StudentDetails.$trong $pull tham chiếu đến phần tử đó$pullxóa "MySQL" khỏi mảngStudentFavouriteSubjectcủa phần tử đó