Код инициализации:
let dbPormise = null;
const OBJECT_STORE_NAME = 'pages';
const DB_NAME = 'tracking-log';
Чтобы инициировать ObjectStore:
dbPromise = idb.open(DB_NAME, 3, upgradeDB => {
upgradeDB.createObjectStore(OBJECT_STORE_NAME, {
autoIncrement: true,
keypath: 'id'
});
});
Вот так я генерирую пустую запись в IndexedDB:
const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');
tx.objectStore(OBJECT_STORE_NAME).put(
{ id: newBucketID, data: [] });
Теперь, позже, у меня есть некоторые элементы, которые я хочу добавить в массив data
для определенного id
.
Вот как я пытался это сделать:
const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');
tx.objectStore(OBJECT_STORE_NAME).put(
{ id: localStorage.getItem("currentBucket"), data: item }
);
Схема
{
data: Array
}
Каждый элемент имеет уникальный ключ, сгенерированный и предоставленный мной.
Однако это не работает ивозвращает ошибку: «Ключ уже существует в хранилище объектов».
Итак, как я могу добавить значение в поле внутри объекта IDB?