Rất tiếc, bạn không thể sử dụng $
toán tử nhiều hơn một lần cho mỗi khóa, vì vậy bạn phải sử dụng các giá trị số cho phần còn lại. Như trong:
db.myCollection.update({
"id": 1,
"forecasts.forecast-id": 123,
"forecasts.levels.level": "proven",
"forecasts.levels.configs.config": "Custom 1"
},
{"$set": {"forecasts.$.levels.0.configs.0": newData}}
)
MongoDB hỗ trợ cập nhật các mảng lồng nhau là kém. Vì vậy, tốt nhất bạn nên tránh sử dụng chúng nếu bạn cần cập nhật dữ liệu thường xuyên và thay vào đó hãy cân nhắc sử dụng nhiều bộ sưu tập.
Một khả năng:đưa ra forecasts
bộ sưu tập của riêng nó và giả sử bạn có một bộ level
cố định giá trị, tạo level
một đối tượng thay vì một mảng:
{
_id: 123,
parentId: 1,
name: "Forecast 1",
levels: {
proven: {
configs: [
{
config: "Custom 1",
variables: [{ x: 1, y:2, z:3}]
},
{
config: "Custom 2",
variables: [{ x: 10, y:20, z:30}]
},
]
},
likely: {
configs: [
{
config: "Custom 1",
variables: [{ x: 1, y:2, z:3}]
},
{
config: "Custom 2",
variables: [{ x: 10, y:20, z:30}]
},
]
}
}
}
Sau đó, bạn có thể cập nhật nó bằng cách sử dụng:
db.myCollection.update({
_id: 123,
'levels.proven.configs.config': 'Custom 1'
},
{ $set: { 'levels.proven.configs.$': newData }}
)