IDBIndex - 提供对数据库索引的异步访问
IDBIndex
是 IndexedDB API 的 接口,提供对数据库索引的异步访问。索引是一种对象存储,用于在另一个对象存储中查找记录,称为引用的对象存储。您可以使用此接口来检索数据。
您可以通过主键或使用索引检索对象库中的记录。索引允许您使用对象存储记录中除主键之外的值的属性来查找对象库中的记录。
索引是持久的键值存储,其记录的值部分是引用的对象库中记录的关键部分。只要插入,更新或删除引用的对象库中的记录,就会自动填充索引中的记录。索引中的每个记录只能指向其引用的对象库中的一个记录,但是多个索引可以引用同一个对象库。当对象库更改时,引用该对象库的所有索引都将自动更新。
您可以在一定范围内获取一组键。要了解更多信息,请参阅 IDBKeyRange
。
属性
IDBIndex.isAutoLocale
只读
返回一个 Boolean
,指示索引是否在创建时指定了 locale
值 auto
(参见 createIndex()
的 optionalParameters。)
IDBIndex.locale
只读
返回索引的语言环境(例如 en-US
或 pl
),如果在创建时指定了 locale
值的话(参见 createIndex()
的 optionalParameters。)
IDBIndex.name
此索引的名称。
IDBIndex.objectStore
只读
此索引引用的对象库的名称。
IDBIndex.keyPath
只读
此索引的 key path。如果为 null
,则此索引不是自动填充。
IDBIndex.multiEntry
只读
当评估索引的键路径的结果产生数组时,会影响索引的行为方式。如果为 true
,则索引中的每个项目中都有一条记录。如果为 false
,则每个键的数组都有一条记录。
IDBIndex.unique
只读
如果为 true
,则此索引不允许键存在重复值。
方法
继承自:EventTarget
IDBIndex.count()
返回 IDBRequest
对象,并在单独的线程中返回键范围内的记录数。
IDBIndex.get()
返回一个 IDBRequest
对象,如果 key
是 IDBKeyRange
,并在一个单独的线程中,找到引用的对象存储库中与给定键对应的值或第一个对应的值。
IDBIndex.getKey()
返回一个 IDBRequest
对象,如果 key
是 IDBKeyRange
,并在一个单独的线程中,找到给定的键或主键。
IDBIndex.getAll()
返回一个 IDBRequest
对象,如果 key
是 IDBKeyRange
,在单独的线程中,查找引用的对象库中与给定键对应,或者在范围内的所有匹配值。
IDBIndex.getAllKeys()
返回一个 IDBRequest
对象,如果 key
是 IDBKeyRange
,在单独的线程中,查找引用的对象库中与给定键对应,或者在范围内的所有匹配键。
IDBIndex.openCursor()
返回一个 IDBRequest
对象,并在单独的线程中,在指定的键范围内创建游标。
IDBIndex.openKeyCursor()
返回一个 IDBRequest
对象,并在单独的线程中,在指定的键范围上创建一个光标,由此索引排列。
实例
在下面的实例中,我们打开一个事务和一个对象存储,然后从一个简单的联系人数据库中获取索引 lName
。然后我们使用 IDBIndex.openCursor
在索引上打开一个基本游标 - 这与使用 IDBObjectStore.openCursor
直接在 ObjectStore
上打开游标相同,区别是返回的记录是根据索引而不是主键排序的。
最后,我们遍历每条记录,并将数据插入到 HTML 表格中。有关完整的工作示例,请参阅我们的IDBIndex-实例演示仓库(查看实例)。
function displayDataByIndex() {
tableEntry.innerHTML = '';
var transaction = db.transaction(['contactsList'], 'readonly');
var objectStore = transaction.objectStore('contactsList');
var myIndex = objectStore.index('lName');
myIndex.openCursor().onsuccess = function(event) {
var cursor = event.target.result;
if(cursor) {
var tableRow = document.createElement('tr');
tableRow.innerHTML = '<td>' + cursor.value.id + '</td>'
+ '<td>' + cursor.value.lName + '</td>'
+ '<td>' + cursor.value.fName + '</td>'
+ '<td>' + cursor.value.jTitle + '</td>'
+ '<td>' + cursor.value.company + '</td>'
+ '<td>' + cursor.value.eMail + '</td>'
+ '<td>' + cursor.value.phone + '</td>'
+ '<td>' + cursor.value.age + '</td>';
tableEntry.appendChild(tableRow);
cursor.continue();
} else {
console.log('所有条目都显示出来了。');
}
};
};
规范
规范 | 状态 | 备注 |
---|---|---|
Indexed Database API IDBIndex 的定义 |
推荐 | - |
Indexed Database API 2.0 IDBIndex 的定义 |
编者的草案 | - |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 24 23 — 57 webkit | 支持 | 16 10 — 16 moz | 101 | 15 | 7 |
Available in workers | 支持 | 支持 | 37 | 未知 | 支持 | 未知 |
isAutoLocale | 不支持 | 不支持 | 43 | 不支持 | 不支持 | 不支持 |
keyPath | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
locale | 不支持 | 不支持 | 43 | 不支持 | 不支持 | 不支持 |
multiEntry | 24 23 — 24 webkit | 未知 | 16 10 — 16 moz | 101 | 15 | 7 |
name | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
objectStore | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
unique | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
count | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
get | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
getAll | 48 | 支持 | 44 | 不支持 | 35 | 10.1 |
getAllKeys | 48 | 支持 | 44 | 不支持 | 35 | 10.1 |
getKey | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
openCursor | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
openKeyCursor | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 24 23 — 57 webkit | 24 23 — 57 webkit | 未知 | 22 | 未知 | 22 | 8 |
Available in workers | 支持 | 支持 | 支持 | 37 | 未知 | 支持 | 未知 |
isAutoLocale | 不支持 | 不支持 | 不支持 | 43 | 未知 | 不支持 | 不支持 |
keyPath | 24 23 — 24 webkit | 24 23 — 24 webkit | 支持 | 22 | 未知 | 22 | 8 |
locale | 不支持 | 不支持 | 不支持 | 43 | 未知 | 不支持 | 不支持 |
multiEntry | 24 23 — 24 webkit | 24 23 — 24 webkit | 未知 | 22 | 未知 | 22 | 8 |
name | 24 23 — 24 webkit | 24 23 — 24 webkit | 支持 | 22 | 未知 | 22 | 8 |
objectStore | 24 23 — 24 webkit | 24 23 — 24 webkit | 支持 | 22 | 未知 | 22 | 8 |
unique | 24 23 — 24 webkit | 24 23 — 24 webkit | 支持 | 22 | 未知 | 22 | 8 |
count | 24 23 — 24 webkit | 24 23 — 24 webkit | 支持 | 22 | 未知 | 22 | 8 |
get | 24 23 — 24 webkit | 24 23 — 24 webkit | 支持 | 22 | 未知 | 22 | 8 |
getAll | 48 | 48 | 支持 | 44 | 未知 | 35 | 10.1 |
getAllKeys | 48 | 48 | 支持 | 44 | 未知 | 35 | 10.1 |
getKey | 24 23 — 24 webkit | 24 23 — 24 webkit | 支持 | 22 | 未知 | 22 | 8 |
openCursor | 24 23 — 24 webkit | 24 23 — 24 webkit | 支持 | 22 | 未知 | 22 | 8 |
openKeyCursor | 24 23 — 24 webkit | 24 23 — 24 webkit | 支持 | 22 | 未知 | 22 | 8 |
1. 部分的
相关链接
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 设置一系列键:
IDBKeyRange
- 检索并更改数据:
IDBObjectStore
- 使用游标:
IDBCursor
- 参考实例:To-do 通知 (在线查看实例。)