浏览器 IndexedDB 简明教程 ( 十五 ) - 查看存储对象上的索引

yufei       5 年, 8 月 前       822

浏览器 IndexedDB 简明教程 ( 十四 ) - 创建索引 章节的范例中,我们为存储对象 city 的键 city_name 创建了一个索引,但我们要怎么知道一个存储对象上有哪些索引呢 ?

答案就是通过 IDBObjectStoreindexNames 属性

IDBObjectStore.indexNames 属性

IDBObjectStoreindexNames 属性是一个 DOMStringList 类型,它是一个字符串列表,存储了某个存储对象上的所有索引

如果你对 DOMStringList 不熟悉,可以访问 浏览器 IndexedDB 简明教程 ( 八 ) - 判断某个存储对象是否存在 中的相关节

因此,我们可以在 indexNames 属性上调用 contains() 方法可以用来判断某个索引是否存在,参数很简单,就是索引的名称

例如下面的代码,如果存储对象 city 上已经存在了名为 city_name 的索引则不重新创建,创建一个 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'});
    if ( ! city_os.indexNames.contains('city_name')) {
        // 创建一个新的索引 city_name
        city_os.createIndex('city_name', 'city_name', { unique: false });
        console.log('在存储对象 city 上创建了一个索引 city_name');
    }
}

输出结果如下

升级成功
在存储对象 city 上创建了一个索引 city_name
打开数据库成功
往 city 里添加了两条数据
目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

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

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