Dùng $set với dot notation để cập nhật sâu
MongoDB cho phép cập nhật trường lồng sâu bằng cách chỉ định đường dẫn qua dấu chấm.
Dữ liệu ban đầu
> db.demo315.insertOne({
_id: 101,
details: [{
Name: 'Chris',
subjects: [{id: 1001, SubjectName: "MySQL"}]
}]
});
Cập nhật: Thêm subject thứ 2 với id=1004
> db.demo315.update(
{ _id: 101 },
{ $set: { "details.0.subjects.1.id": 1004 } }
);
Kết quả
{
"_id": 101,
"details": [{
"Name": "Chris",
"subjects": [
{ "id": 1001, "SubjectName": "MySQL" },
{ "id": 1004 } // SubjectName chưa có, sẽ được thêm khi set
]
}]
}
Cú pháp đường dẫn: details.0.subjects.1.id nghĩa là:
details- mảng0- phần tử đầu tiênsubjects- mảng con1- phần tử thứ 2 (index 1)id- trường cần set
Lưu ý: Nếu index vượt quá độ dài mảng, MongoDB sẽ tự động mở rộng mảng với các phần tử null.