sql >> Database >  >> NoSQL >> MongoDB

Mongodb update diep genest subdocument

Helaas kunt u de $ . niet gebruiken operator meer dan één keer per toets, dus u moet voor de rest numerieke waarden gebruiken. Zoals in:

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 ondersteuning voor het updaten van geneste arrays is slecht. U kunt het gebruik ervan dus het beste vermijden als u de gegevens regelmatig moet bijwerken, en in plaats daarvan overwegen om meerdere verzamelingen te gebruiken.

Een mogelijkheid:maak forecasts zijn eigen verzameling, en ervan uitgaande dat je een vaste set van level . hebt waarden, maak level een object in plaats van een 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}]
        }, 
      ]
    }
  }
}

Dan kun je het updaten met:

db.myCollection.update({
    _id: 123,
    'levels.proven.configs.config': 'Custom 1'
  },
  { $set: { 'levels.proven.configs.$': newData }}
)


  1. Hoe redis-server te starten op een andere poort dan de standaardpoort 6379 in ubuntu

  2. Afhandeling van MongoDB ontkoppelen/opnieuw verbinden van Node

  3. MongooseError [MongooseServerSelectionError]:verbinding <monitor> naar 52.6.250.237:27017 gesloten

  4. MongoDB en sluit zich aan