【问题标题】:Updating table 'primary key' using dexie.js使用 dexie.js 更新表“主键”
【发布时间】:2019-12-16 07:14:14
【问题描述】:

我在离线时使用 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

是否只有删除当前记录并使用新值重新插入它的选项?这将是一个问题,需要对我的 API 进行大量重写,因此我试图避免这种情况。

【问题讨论】:

    标签: javascript dexie


    【解决方案1】:

    IndexedDB 不支持更改条目的主键,但在 dexie@3.x 中,通过使用 table.update() 时删除/添加项目来支持它。您可以使用 npm install dexie@next 安装它。

    【讨论】:

    • 所有代码是否都向后兼容为 2.x 版本编写的代码?
    • 是的,除了这里提到的 API 的一些不寻常部分:dexie.org/docs/Deprecations
    猜你喜欢
    • 1970-01-01
    • 2021-01-20
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    相关资源
    最近更新 更多