Должен ли я использовать cursor.delete () или objectStore.delete (id) для IndexedDB? - PullRequest
1 голос
/ 29 мая 2020

Если я хочу удалить все красные автомобили в IndexedDB, какой метод быстрее?

transaction.objectStore("cars").index("color").openCursor("red").onsuccess = e => {
  var row = e.target.result;
  if(row) {
    row.delete();
    row.continue();
  }
};

Этот метод удаления строки курсора является прямым, но требует использования openCursor (вместо openKeyCursor), который, к сожалению, анализирует весь объект.

или

var cars = transaction.objectStore("cars");
cars.index("color").openKeyCursor("red").onsuccess = e => {
  var row = e.target.result;
  if(row) {
    cars.delete(row.primaryKey);
  }
};

Этот метод не требует, чтобы курсор анализировал весь объект, но objectStore.delete() может потребоваться выполнить поиск по всем снова.

...