Для удаления данных из хранилища в 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");