浏览器 IndexedDB 简明教程 ( 十四 ) - 创建索引

yufei       5 年, 8 月 前       1894

浏览器 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 });
}
8 回复  |  直到 Mar 05, 2023

jiege

#1   •   1 年, 1 月 前   •  

IDBObjectStore.createIndex( name,keypath,{multiEntry:true})
keypath 为什么我写数组,multiEntry:true 会报错呢?它这个是什么意思?可以解释一下吗大佬

jiege

#2   •   1 年, 1 月 前   •  

不用了知道了,这玩意很不好看,原来是键的值是数组。

yufei

#3   •   1 年, 1 月 前   •  

抱歉啊,没及时回复,因为没做通知的东西

yufei

#4   •   1 年, 1 月 前   •  

测试新的回复通知

yufei

#5   •   1 年, 1 月 前   •  

测试新的回复通知

yufei

#6   •   1 年, 1 月 前   •  

测试新的回复通知

yufei

#7   •   1 年, 1 月 前   •  

测试新的回复

yufei

#8   •   1 年, 1 月 前   •  

测试新的回复通知

简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.