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

时间:2018-04-15 00:11:37

标签: javascript indexing indexeddb dexie

我设置了一个带有唯一键的表,如:



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"看它是否存在可能不是一个可行的选择。

1 个答案:

答案 0 :(得分:0)

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

每次尝试存储对象时,

indexedDB都会失败并出现约束错误。

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

或者,我想你可以改变你的观点,并说各种看跌可能会失败。或者重构对象存储和约束。这种特殊类型的问题绝对是决定如何存储对象的标准。