使用id键更新IndexedDb记录的单列

时间:2014-03-29 05:16:04

标签: indexeddb

我想知道如何更新像(UPDATE TABLE SET column_name= MyNewValue WHERE ID=MyKey)这样的IndexedDB记录。我想使用密钥更新对象中的单个属性..

尝试使用Cursor进行更新时,我收到此错误,

未捕获的DataError:无法执行'更新' on' IDBCursor':此光标的有效对象存储使用内嵌键,并且评估值参数的键路径会产生与光标的有效键不同的值。

2 个答案:

答案 0 :(得分:4)

感谢您提出错误。在没有看到您的对象存储库创建代码的情况下,我无法肯定地说,但我对这类问题非常熟悉。

这意味着您不使用自动递增键,并自行提供密钥。这很正常。在这种情况下,您使用以下IDBCursor.update() signature

cursor.update(your_updated_entry_object);

IDB知道要更新的条目,因为您的密钥是"在线"在your_updated_entry_object上(意思是your_updated_entry_object有一个属性是你的关键)。

听起来你可能已经看过IDBStore.put()方法并且感到困惑。这需要两个单独的签名,用于所谓的"内联键" (你有什么)和"外线"键(如果你让IDB自动增加你的键,你会得到什么)。

使用内嵌键,它与IDBCursor.update()具有相同的签名:

store.put(your_updated_entry_object);

但是对于外线密钥,它需要一个额外的key参数,告诉IDB要更新哪个对象(因为您不在游标上,否则您的请求没有上下文) :

store.put(your-updated_entry_object, your_autoincremented_key);

答案 1 :(得分:0)

是的,光标上的update方法具有误导性,因为它表明内联主键也可以改变。有a lengthy discussion是否允许根据方法更改主键。

实际上,如果允许更改主键,则更加令人困惑,因此it is not allowed。唯一的方法是删除并创建一个新的。它也是其他键值存储的概念。

  

如果此游标的有效对象存储使用内联键并且评估value参数的键路径导致的值与游标的有效键不同,则实现必须抛出DataError类型的DOMException。