Удаление данных из хранилища

Последнее обновление: 11.11.2023

Для удаления данных из хранилища в IndexDB применяются методы delete() и clear() объекта IDBObjectStore

Метод delete() удаляет все объекты по определенным ключам, которые передаются в качестве параметра:

delete(key)

Причем в качестве значения параметру можно передать конкретное значение либо диапазон ключей в виде объекта IDBKeyRange.

Этот метод возвращает объект IDBRequest. Если метод выполняется успешно, то для объекта IDBRequest генерируется событие success, а его свойство result содержит значение undefined. В случае возникновения ошибки у объекта IDBRequest срабатывает событие error, а его свойство error содержит информацию об ошибке. Для обработки этих событий можно использовать соответственно свойства onsuccess и onerror

Например, удалим объект, у которого ключ равен 1:

const request = indexedDB.open("test", 5); // подключаемся к бд test

// при создании или изменении версии базы данных создаем в ней хранилище users
request.onupgradeneeded = (event) => { 
    const db = event.target.result;  // получаем бд
    // ключом является свойство id, и оно автоматически инкрементируется
    const userStore = db.createObjectStore("users", { keyPath: "id", autoIncrement: true });
    userStore.add({name: "Tom", age: 39});
    userStore.add({name: "Bob", age: 43});
    userStore.add({name: "Sam", age: 28});
};
// при открытии базы данных удаляем из хранилища users 1 объект
request.onsuccess = (event) => { 
    const db = event.target.result;  // получаем бд
    const transaction = db.transaction(["users"], "readwrite"); // создаем транзакцию
    const userStore = transaction.objectStore("users");   // получаем хранилище users

    // удаляем все объекты, у которых ключ равен 1   
    const deleteRequest = userStore.delete(1);
    // при успешном получении выводим уведомление количество на консоль
    deleteRequest.onsuccess = () => console.log("Successfully deleted", deleteRequest.result);
    deleteRequest.onerror = () =>  console.log(deleteRequest.error);
};

Для создания диапазона ключей применяются следуюшие статические методы интерфейса IDBKeyRange:

  • IDBKeyRange.bound(): создает диапазон ключей, для которого задано минимальное и максимальное значения

  • IDBKeyRange.only(): создает диапазон ключей, который содержит только одно значение

  • IDBKeyRange.lowerBound(): создает диапазон ключей, для которого задано минимальное значение

  • IDBKeyRange.upperBound(): создает диапазон ключей, для которого задано максимальное значение

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

Диапазон

Код

Значение ключа >= x

IDBKeyRange.lowerBound(x)

Значение ключа > x

IDBKeyRange.lowerBound(x, true)

Значение ключа <= y

IDBKeyRange.upperBound(y)

Значение ключа < y

IDBKeyRange.upperBound(y, true)

Значение ключа >= x && <= y

IDBKeyRange.bound(x, y)

Значение ключа > x < y

IDBKeyRange.bound(x, y, true, true)

Значение ключа > x && <= y

IDBKeyRange.bound(x, y, true, false)

Значение ключа >= x &&< y

IDBKeyRange.bound(x, y, false, true)

Значение ключа = z

IDBKeyRange.only(z)

Например, удалим все объекты, у которых значение ключа не больше 2:

const deleteRequest = userStore.delete(IDBKeyRange.upperBound(2));
deleteRequest.onsuccess = () => console.log("Successfully deleted");

Удаление всех данных

Для удаления абсолютно всех данных из хранилища базы данных применяется метод clear(). Он не принимает никаких параметров и возвращает объект IDBRequest. При успешном выполнении свойство result у IDBRequest также равно undefined

// удаляем все объекты
const deleteRequest = userStore.clear();   
deleteRequest.onsuccess = () => console.log("Successfully deleted");
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850