Как с помощью Dexie удалить значение из поля массива для всех объектов в таблице?

Из этот вопрос Я могу найти все объекты в моей таблице, где значение встречается в поле, которое является массивом. Теперь мне нужно удалить это значение из этого поля для всех объектов в этой таблице.

Например, предположим, что таблица events с объектами:

{ people: ['John', 'Bob', 'Sue'] }
{ people: ['Harry', 'Sue', 'Jim'] }
{ people: ['John', 'Bob', 'Elaine'] }
{ people: ['Jim', 'Bob', 'Sue'] }

Предположим, я хочу удалить «Сью» из поля people для всех объектов.

Как это делается с Декси?


person David Burson    schedule 07.02.2020    source источник
comment
найти все объекты с этим значением, а затем перезаписать их по одному без значения в массиве. чтобы найти, вы можете захотеть использовать многозначный индекс.   -  person Josh    schedule 08.02.2020


Ответы (1)


Добавление следующего кода в асинхронную функцию сделает это:

await db.events.where('people').equals('Sue').modify(x => {
  // This callback is run for every match.
  // Here you can modify the people property to remove Sue from it:
  x.people = x.people.filter(p => p !== 'Sue');
});

Примечание. Предположим, что схема индексирует «людей» с помощью индекса multiEntry:

const db = new Dexie("testdb");
db.version(3).stores({
  events: 'id, *people'
});

Использованная литература:

person David Fahlander    schedule 08.02.2020
comment
Не могли бы вы подробнее рассказать о своем ответе? - person Twenty; 09.02.2020
comment
Спасибо, Дэвид Ф., это очень помогло мне. Я поддержал. @Twenty, эта ссылка может оказаться полезной: dexie.org/docs/Collection/Collection.modify () Лично я ценю твердый ответ, даже если он краток, и твердый, быстрый ответ на выходных - ИМО, достойный голоса. - person David Burson; 09.02.2020
comment
Извините за короткий ответ. Делал это с мобильного перед сном. Но ссылка на Collection.modify (), которую написал Дэвид Бурсон, должна объяснить это вместе со ссылкой на индекс MultiEntry: dexie.org/docs/MultiEntry-Index. - person David Fahlander; 10.02.2020