仅更新 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'
}
谢谢。
- 您不能进行部分更新,您只能覆盖整个对象
- 从内存中读取对象,修改,然后写回
这可以通过以下步骤实现 -
- 首先使用 idbcursor 获取项目
- 更新那个项目
- 调用
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 查询替代方法。
例如:
object1(1) = {
name: 'Rhodok Sergeant',
speciality: 'Hand to hand battle'
}
那么我只想将 speciality 字段更新为:
object1(1) = {
name: 'Rhodok Sergeant',
speciality: 'Long range battle'
}
谢谢。
- 您不能进行部分更新,您只能覆盖整个对象
- 从内存中读取对象,修改,然后写回
这可以通过以下步骤实现 -
- 首先使用 idbcursor 获取项目
- 更新那个项目
- 调用
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 查询替代方法。