Desværre kan du ikke bruge $
operatør mere end én gang pr. nøgle, så du skal bruge numeriske værdier for resten. Som i:
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's understøttelse af opdatering af indlejrede arrays er dårlig. Så du er bedst tjent med at undgå deres brug, hvis du har brug for at opdatere dataene ofte, og overveje at bruge flere samlinger i stedet for.
En mulighed:lav forecasts
sin egen samling, og forudsat at du har et fast sæt level
værdier, lav level
et objekt i stedet for et array:
{
_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}]
},
]
}
}
}
Så kan du opdatere den ved at bruge:
db.myCollection.update({
_id: 123,
'levels.proven.configs.config': 'Custom 1'
},
{ $set: { 'levels.proven.configs.$': newData }}
)