在阅读了几篇教程后,我仍然无法完全理解IndexedDB ... 我已经用它构建了一个“playground-app”,但在继续之前我有一个问题......
是否建议在ObjectStores中使用不同的“id”字段?
如果索引42(没有id-field)的对象需要更新,会发生什么? [据我所知,IndexedDB没有更新命令。]如何在不破坏对该对象的引用的情况下就地交换/更新此对象?
当你有一个id-field时 - 如何在向ObjectStore添加新对象时找到一个未使用的id-value?有一种聪明的方法吗?
我无法在SO或其他地方找到关于此的讨论......
喝彩!
答案 0 :(得分:0)
不需要使用id,但建议使用它,因为它简化了编写程序的过程。此建议适用于传统的关系数据库(SQL)和indexedDB(NoSQL)。
使用简单的整数计数器很有帮助,即使您拥有唯一标识商店中每个对象的其他属性或属性组(复合/复合主键),也是有用的。
indexedDB提供了一种生成'未使用的' id值。调用createObjectStore并设置密钥路径时,请使用autoincrement标志。
请参阅MDB documentation了解详情。具体来说,请查看有关对象存储库键的部分。
关于42问题,您可以open a cursor,然后advance the cursor乘以42,然后检索值,更改其属性,然后,如果基础事务处于读写模式,则可以调用cursor.update来替换光标位置的对象。建议不要使用这种技术,因为它不实用且容易混淆。最好使用简单的自动递增整数id,尤其是刚刚学习时。
表示密钥的属性名称是什么并不重要,只要它符合普通的JavaScript对象属性命名规则,并且您可以一致地访问它。