在 浏览器 IndexedDB 简明教程 ( 十三 ) - 索引 章节中我们对 IndexedDB 中的索引做了一些简单的介绍,同时也介绍了 IDBIndex
对象的属性和方法
索引允许我们搜索任何字段,即从任何字段获取数据记录
如果尚未创建任何索引,则默认情况下只能搜索主键 ( 从主键获取值 )
我也一样
IDBObjectStore.createIndex()
打开 浏览器 IndexedDB 简明教程 ( 九 ) - 添加数据 章节,我们可以看到 IDBObjectStore
提供了 createIndex()
方法用来在当前存储对象上创建索引
该方法的原型如下
IDBObjectStore.createIndex(name, keyPath, [parameters])
利用指定的 name 和 keyPath 参数,创建并返回一个新的 IDBIndex 对象
该方法只能在 versionChange
事务模式回调中调用,也就是 onupgradeneeded
事件回调中使用
对于可选参数 [parameters]
可以添加的键
键 | 说明 |
---|---|
unique | 默认为 true ,如果为 true,键的值不能重复 |
multiEntry | 默认为 false,若为 true,当 keyPath 解析为数组时,每个数组元素都会单独被添加为索引。若为 false,索引就只是一个包含多个元素的数组 |
例如下面的代码,存储对象的 name
键创建了一个唯一索引
objectStore.createIndex('name', 'name', { unique: false });
范例
下面的代码,为存储对象 city
的字段 city_name
创建了一个可重复的普通索引
var db; //先删除 window.indexedDB.deleteDatabase('demo') const req = window.indexedDB.open('demo'); req.onerror = function (event) { console.log('打开数据库失败'); }; req.onsuccess = function (event) { console.log('打开数据库成功'); db = event.target.result; var ts = db.transaction( ['city'] ,'readwrite'); var city_os = ts.objectStore('city'); city_os.add({city_id:100000,'city_name':'北京'}); city_os.add({city_id:300000,'city_name':'天津'}); console.log('往 city 里添加了两条数据'); }; req.onupgradeneeded = function (event) { console.log('升级成功'); db = event.target.result; var city_os = db.createObjectStore('city',{keyPath:'city_id'}); city_os.createIndex('city_name', 'city_name', { unique: false }); }
#1 • 1 年, 9 月 前 •
IDBObjectStore.createIndex( name,keypath,{multiEntry:true})
keypath 为什么我写数组,multiEntry:true 会报错呢?它这个是什么意思?可以解释一下吗大佬
#2 • 1 年, 9 月 前 •
不用了知道了,这玩意很不好看,原来是键的值是数组。
#3 • 1 年, 9 月 前 •
抱歉啊,没及时回复,因为没做通知的东西
#4 • 1 年, 9 月 前 •
测试新的回复通知
#5 • 1 年, 9 月 前 •
测试新的回复通知
#6 • 1 年, 9 月 前 •
测试新的回复通知
#7 • 1 年, 9 月 前 •
测试新的回复
#8 • 1 年, 9 月 前 •
测试新的回复通知