Для удаления данных из хранилища в 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()
: создает диапазон ключей, для которого задано максимальное значение
Диапазоны ключей, которые создаются с помощью этих методов, можно описать следующей таблицей:
Диапазон |
Код |
Значение ключа >= |
|
Значение ключа > |
|
Значение ключа <= |
|
Значение ключа < |
|
Значение ключа >= |
|
Значение ключа > |
|
Значение ключа > |
|
Значение ключа >= |
|
Значение ключа = |
|
Например, удалим все объекты, у которых значение ключа не больше 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");