仅更新 IndexedDB 中对象的某些字段

Update ONLY some fields of an object in IndexedDB

例如:

object1(1) = { name: 'Rhodok Sergeant', speciality: 'Hand to hand battle' }

那么我只想将 speciality 字段更新为:

object1(1) = { name: 'Rhodok Sergeant', speciality: 'Long range battle' }

谢谢。

  • 您不能进行部分更新,您只能覆盖整个对象
  • 从内存中读取对象,修改,然后写回

这可以通过以下步骤实现 -

  1. 首先使用 idbcursor 获取项目
  2. 更新那个项目
  3. 调用 cursor.update 将更新的数据存储在 indexedb 中。

示例代码是 -

const transaction = db.transaction(['rushAlbumList'], 'readwrite');
const objectStore = transaction.objectStore('rushAlbumList');

objectStore.openCursor().onsuccess = function(event) {
    const cursor = event.target.result;
    if (cursor) {
        if (cursor.value.albumTitle === 'A farewell to kings') {
            const updateData = cursor.value;

            updateData.year = 2050;
            const request = cursor.update(updateData);
            request.onsuccess = function() {
                console.log('data updated');
            };
        };
        cursor.continue();
    }
};

查看此 link 了解更多信息 - https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor/update

注意:- 在上面的代码中,我循环遍历所有记录,如果您想根据某些条件获取特定记录,这效率不高。因此,您可以为此使用 idbKeyRange 或其他一些 idb 查询替代方法。