Tyvärr kan du inte använda $
operatör mer än en gång per nyckel, så du måste använda numeriska värden för 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 stöd för uppdatering av kapslade arrayer är dåligt. Så det är bäst att du undviker att de används om du behöver uppdatera data ofta och överväga att använda flera samlingar istället.
En möjlighet:gör forecasts
sin egen samling, och förutsatt att du har en fast uppsättning level
värden, gör level
ett objekt istället för en 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}]
},
]
}
}
}
Sedan kan du uppdatera den med:
db.myCollection.update({
_id: 123,
'levels.proven.configs.config': 'Custom 1'
},
{ $set: { 'levels.proven.configs.$': newData }}
)