我设置了一个带有唯一键的表,如:
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"看它是否存在可能不是一个可行的选择。
答案 0 :(得分:0)
不,indexedDB中没有类似的功能,因此我假设在dexie中也没有任何东西,它基本上只是一个包装器库。
每次尝试存储对象时,indexedDB都会失败并出现约束错误。
您需要使用openCursor
或get
或openKeyCursor
来查找是否存在记录,然后决定是否使用put
。这将始终涉及两个请求,即使您使用openCursor
和cursor.update
,因为cursor.update
只是put
的语法糖。
或者,我想你可以改变你的观点,并说各种看跌可能会失败。或者重构对象存储和约束。这种特殊类型的问题绝对是决定如何存储对象的标准。