根据MDN文档的描述,索引是一种为了在其他
objectStore
中查找数据的
objectStore
。用户可以使用这个接口来获取数据。
用户可以通过主键或者是索引来获取数据。索引可以让你使用记录中的值而不是主键来查找数据。
数组是一个长期有效的键-值存储,它的值就是被参照的objectStore
的键。无论什么时候数据在被参照objectStoe
中被插入、更新或删除,索引中的数据是自动产生的。索引中的每一条数据
都只能指向被参照objectStore
中的一条数据,但是几条数据可以同时指向被参照objectStore
中的同一条数据。
索引的创建
创建索引需要用到IDBObjectStore
对象的createIndex
方法,需要注意这个方法只能在VersionChange
事件回调中调用。
createIndex的用法
用法如下:
let index = objectStore.createIndex(indexName, keyPath, objectParameters);
参数说明
indexName
:将要创建的索引的名字。可以为空。keyPath
:索引的值。可以为空,也可以传一个数组。objectParameters
:一个IDBIndexParameters
对象。可以包含如下值:unique
:如果为真,索引将不会允许一个键对应多个值的情况multiEntry
:如果为真且keyPath
指向的字段是数组,那么会为数组中每个元素建立索引
IDBIndex
常用方法
IDBIndex.get()
IDBIndex
的get
方法会返回一个IDBRequest
对象,同时在另一个线程中会寻找被参照的objectStore
内与给出的键相关的值,或者是如果这个键在IDBKeyRange
所给定的范围内的话,那么给出第一个相关值。
用法
let request = myIndex.get(key);
参数
- key:可选参数。一个键,或者是一个想要查询的数据的范围。如果这个值为空或,那么浏览器会选择
unbound
的范围。
IDBIndex.getAll()
通过游标(cursor)来查看数据的值存在性能损失,因为对象是懒创建的。而如果使用像getAll
这样的方法,浏览器不得不同时创建所有的对象。如果只是想用游标来看数据的键,那么使用游标是更有效的选择。
用法
var getAllKeysRequest = IDBIndex.getAll(query, count);
参数
- query:与
IDBIndex
的get
方法类似含义。 - count:希望所返回的数据数。