Декси: Как добавить в массив во вложенном объекте

Я использую оболочку Dexie IndexedDB и пытаюсь добавить объект в существующий массив, который находится внутри вложенного объекта. Структура выглядит примерно так, как показано ниже

{ 
  Name : 'John',
  age : 33,
  tags : {
     skill: [{
         first: '.NET',
         second: 'JAVA',
         third: [{special1:'sleep'},{special2:'eat'}] 
     }]
  }
}

Я пробовал много способов подтолкнуть объект special3: 'run' к skill.third, но безуспешно. Моя последняя попытка выглядела примерно так

    const pathObject = {};
    const fullPath = 'result.tags.skill[3].third';
    pathObject[fullPath] = {special3:'run'};
    db.inspections.update(id, pathObject);

Объект добавляется снаружи, а не внутри массива "третий", как показано ниже.

{ 
  Name : 'John',
  age : 33,
  tags : {
     skill: [{
         first: '.NET',
         second: 'JAVA',
         third: [{special1:'sleep'},{special2:'eat'}] 
     }]
     skill[3]: {
         third: {special3:'run'}
     }
  }
}

Я хочу знать, есть ли способ добавить к массивам во вложенном объекте с помощью Dexie, если нет способа добиться этого с помощью indexeddb. Помощь приветствуется, поскольку проблема сдерживает прогресс


person Adi    schedule 04.07.2017    source источник


Ответы (1)


Самый простой - использовать Collection.modify () с функцией обратного вызова для изменения вашей модели:

db.inspections.where('id').equals(id).modify(x =>
    x.tags.skill[0].third.push({special3:'run'}) );

Если вы хотите использовать ключевой путь, содержащий элементы массива, это также возможно, поскольку массивы можно рассматривать как объекты с числовыми клавишами:

db.inspections.update(id, {"tags.skill.0.third.3": {special3:'run'}});
person David Fahlander    schedule 07.07.2017