sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongodb opdatering dybt indlejret underdokument

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 }}
)
 


  1. Gruppér og tæl efter måned

  2. Søger efter værdien af ​​ethvert felt i MongoDB uden eksplicit at navngive det

  3. Bruger du Redis til at implementere login?

  4. Hvordan listes alle MongoDB-databaser i Node.js?