如果唯一键存在则更新 Dexie 条目

Update Dexie entry if unique key exists

我设置了一个 table 和一个唯一的密钥,例如:

let db = new Dexie("myDB");
db.version(1).stores({
  myTable : "++id,&label"
});
db.put({label:"A",name:"Bob"});

我想插入一个带有标签 "A" 的新对象。但是我得到一个 ConstraintError 因为标签 "A" 已经存在。

db.put({label:"A",name:"Mark"});

在 MySQL 我会做这样的事情:

INSERT INTO myTable (label, name) VALUES ("A", "Mark") ON DUPLICATE KEY UPDATE SET label=VALUES(label), name=VALUES(name)

我可以使用 Dexie 对 IndexedDB 做类似的事情吗?请记住,可能有多个唯一索引,因此简单地搜索索引 "A" 以查看它是否存在可能不是一个可行的选择。

不,indexedDB 中没有这样的功能,因此我假设 dexie 中也没有任何东西,它基本上只是一个包装库。

每次您尝试存储对象时,indexedDB 都会因约束错误而失败。

您需要使用openCursorgetopenKeyCursor查找记录是否存在,然后决定是否使用put。这将始终涉及两个请求,即使您使用 openCursorcursor.update,因为 cursor.update 只是 put.

的语法糖

或者,我想你可以换个角度,说各种看跌期权可能会失败。或者重组您的对象存储和约束。这种特殊类型的问题绝对是决定如何存储对象的标准。