代码之家  ›  专栏  ›  技术社区  ›  Michael S.

IndexedDB-我需要“id”字段吗?

  •  0
  • Michael S.  · 技术社区  · 10 年前

    在阅读了几个教程后,我仍然无法完全理解IndexedDB。。。 我已经用它构建了一个“游乐场应用程序”,但在继续之前我有一个问题。。。。

    是否建议在ObjectStores中有一个不同的“id”字段?

    如果索引42处的对象(没有id字段)需要更新,会发生什么?[据我所知,IndexedDB没有更新命令。]如何在不破坏对该对象的引用的情况下交换/更新该对象?

    当您有id字段时-当您向ObjectStore添加新对象时,如何查找未使用的id值?有没有聪明的办法?

    我在SO或其他地方找不到关于这个的讨论。。。

    干杯

    1 回复  |  直到 10 年前
        1
  •  0
  •   Josh    10 年前

    不需要使用id,但建议使用它,因为它简化了程序的编写。这一建议适用于传统的关系数据库(SQL)和索引数据库(NoSQL)。

    即使您有另一个属性或一组财产(复合/复合主键)来唯一标识存储中的每个对象,也建议使用简单的整数计数器。

    indexedDB提供了一种生成“未使用”id值的方法。调用createObjectStore并设置密钥路径时,请使用autoincrement标志。

    请参见 MDB documentation 了解更多信息。具体来说,请查看关于对象存储键的部分。

    关于第42个问题,你可以 open a cursor 然后 advance the cursor 通过42,然后检索值,更改其财产,然后,如果基础事务处于读写模式,则可以调用 cursor.update 以替换光标位置处的对象。不建议使用此技术,主要是因为它不实用,可能会造成混淆。最好使用一个简单的自动递增的整数id,特别是当您刚刚学习时。

    表示键的属性的名称是什么并不重要,只要它符合正常的JavaScript对象属性命名规则,并且您可以一致地访问它。