Để tăng giá trị của trường bên trong mảng, sử dụng positional operator $ để xác định phần tử khớp trong mảng.
Ví dụ: Collection incrementInNestedArrayDemo:
> db.incrementInNestedArrayDemo.insertOne({
"StudentId": 100,
"ProjectDetails": [
{ "ProjectId": 567778888, "TeamSize": 4 },
{ "ProjectId": 67888999, "TeamSize": 2 }
]
});
Tăng TeamSize của ProjectId = 67888999 lên 1:
> db.incrementInNestedArrayDemo.update(
{ "StudentId": 100, "ProjectDetails.ProjectId": 67888999 },
{ $inc: { "ProjectDetails.$.TeamSize": 1 } }
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
Kiểm tra:
> db.incrementInNestedArrayDemo.find().pretty();
Kết quả: TeamSize của ProjectId 67888999 từ 2 thành 3.
Giải thích:
ProjectDetails.ProjectIdtrong query: Tìm tài liệu có StudentId=100 VÀ mảng ProjectDetails chứa phần tử có ProjectId=67888999.ProjectDetails.$.TeamSizetrong update:$tham chiếu đến phần tử đầu tiên khớp trong mảng ProjectDetails.
Lưu ý: Chỉ cập nhật phần tử đầu tiên khớp. MongoDB 3.6+ hỗ trợ arrayFilters với $[ để cập nhật nhiều phần tử khớp.