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

Tăng giá trị trong mảng lồng nhau MongoDB

Để 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.ProjectId trong query: Tìm tài liệu có StudentId=100 VÀ mảng ProjectDetails chứa phần tử có ProjectId=67888999.
  • ProjectDetails.$.TeamSize trong 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.