我正在使用 dexie.js 在离线时与用户本地系统上的 IndexedDB 表进行交互。当用户在线时,该表将同步回服务器 MariaDB 表。我在将数据推送到服务器后遇到问题,另一个用户可能已经推送了具有相同 ID 值(用作主键)的另一个值。因此,我将服务器 ID 值以 JSON 格式返回到本地系统,以更新 IndexedDB 值,但是当我尝试这样做时,我遇到了问题,并且似乎无法更新 ID 值。
如果我仅将附加值更新为空,则更新命令可以正常工作。
//SETTING UP THE INITAL TABLE
database.version(1).stores({
table: '++id,text,added'
});
//POPULATE TABLE WITH SOME DATA
database.on("populate", function() {
database.table.add({id: 1, text: "Test Value", added: 1});
});
//UPDATE DATA
database.table.update(1, {id: 4, added: ''}); // DOESN'T WORK
database.table.update(1, {added: ''}); // WORKS
Run Code Online (Sandbox Code Playgroud)
删除当前记录并使用新值重新插入它是唯一的选择吗?这将是一个问题,需要对我的 API 进行重大重写,所以我试图避免这种情况。
IndexedDB 不支持更改条目的主键,但在 dexie@3.x 中,通过使用 table.update() 时删除/添加项目来支持它。您可以使用 npm install dexie@next 安装它。