MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongodb актуализира дълбоко вложен поддокумент

За съжаление, не можете да използвате $ оператор повече от веднъж на ключ, така че трябва да използвате числови стойности за останалите. Като в:

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 за актуализиране на вложени масиви е лоша. Така че е най-добре да избягвате използването им, ако трябва често да актуализирате данните, и вместо това обмислете използването на множество колекции.

Една възможност:правете forecasts собствена колекция и ако приемем, че имате фиксиран набор от level стойности, направете level обект вместо масив:

{
  _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}]
        }, 
      ]
    }
  }
}

След това можете да го актуализирате с помощта на:

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $min Оператор на конвейер за агрегиране

  2. Как да проверите дали полето на масива е част от друг масив в MongoDB?

  3. Клонирайте колекция в MongoDB

  4. Сравняване на _id на mongoose и низове

  5. Пресичане на индекса на MongoDB