IDBIndex
Baseline 广泛可用 *
注意:此功能在 Web Workers 中可用。
IDBIndex 接口(位于 IndexedDB API 中)提供对数据库中 索引的异步访问。索引是一种对象存储,用于查找另一个名为“所引用对象存储”的对象存储中的记录。您可以使用此接口检索数据。
您可以通过主键或使用索引来检索对象存储中的记录。索引允许您使用对象存储记录中除主键以外的其他属性来查找记录。
索引是一种持久化的键值存储,其中其记录的值部分是所引用对象存储中记录的键部分。当所引用对象存储中的记录被插入、更新或删除时,索引中的记录会自动填充。索引中的每条记录只能指向其所引用对象存储中的一条记录,但多个索引可以引用同一个对象存储。当对象存储发生更改时,所有引用该对象存储的索引都会自动更新。
您可以获取一个范围内的键集。有关更多信息,请参阅 IDBKeyRange。
实例属性
IDBIndex.isAutoLocale只读 非标准 已弃用-
返回一个布尔值,指示在创建索引时是否指定了
auto的locale值(参见IDBObjectStore.createIndex()的options参数)。 IDBIndex.locale只读 非标准 已弃用-
返回索引的 locale(例如
en-US或pl),前提是在创建索引时指定了locale值(参见IDBObjectStore.createIndex()的options参数)。 IDBIndex.name-
此索引的名称。
IDBIndex.objectStore只读-
此索引所引用的对象存储的名称。
IDBIndex.keyPath只读-
此索引的 键路径。如果为 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 在该索引上打开了一个基本游标——这与直接在 ObjectStore 上使用 IDBObjectStore.openCursor 打开游标的工作方式相同,但返回的记录是根据索引排序的,而不是主键。
最后,我们遍历每条记录,并将数据插入 HTML 表格。有关完整的可运行示例,请参阅我们的 IndexedDB-examples demo 仓库(在线查看示例)。
function displayDataByIndex() {
tableEntry.textContent = "";
const transaction = db.transaction(["contactsList"], "readonly");
const objectStore = transaction.objectStore("contactsList");
const myIndex = objectStore.index("lName");
myIndex.openCursor().onsuccess = (event) => {
const cursor = event.target.result;
if (cursor) {
const tableRow = document.createElement("tr");
for (const cell of [
cursor.value.id,
cursor.value.lName,
cursor.value.fName,
cursor.value.jTitle,
cursor.value.company,
cursor.value.eMail,
cursor.value.phone,
cursor.value.age,
]) {
const tableCell = document.createElement("td");
tableCell.textContent = cell;
tableRow.appendChild(tableCell);
}
tableEntry.appendChild(tableRow);
cursor.continue();
} else {
console.log("Entries all displayed.");
}
};
}
规范
| 规范 |
|---|
| Indexed Database API 3.0 # index-interface |
浏览器兼容性
加载中…
另见
- 使用 IndexedDB
- 开始事务:
IDBDatabase - 使用事务:
IDBTransaction - 设置键的范围:
IDBKeyRange - 检索和修改数据:
IDBObjectStore - 使用游标:
IDBCursor - 参考示例:待办事项通知(查看实时示例)。