IDBIndex
注意:此功能在Web Workers中可用。
IDBIndex
接口属于IndexedDB API,提供对数据库中索引的异步访问。索引是一种对象存储,用于在另一个对象存储(称为引用对象存储)中查找记录。您可以使用此接口检索数据。
您可以通过主键或使用索引检索对象存储中的记录。索引允许您使用对象存储记录中主键以外的值的属性在对象存储中查找记录
索引是一个持久性的键值存储,其中其记录的值部分是引用对象存储中记录的键部分。每当引用对象存储中的记录插入、更新或删除时,索引中的记录会自动填充。索引中的每个记录只能指向其引用对象存储中的一个记录,但多个索引可以引用同一个对象存储。当对象存储发生更改时,所有引用该对象存储的索引都会自动更新。
您可以获取某个范围内的键集。要了解更多信息,请参阅IDBKeyRange
。
实例属性
IDBIndex.isAutoLocale
只读 非标准 已弃用-
返回一个布尔值,指示索引在创建时是否指定了
locale
值为auto
(请参阅options
参数到IDBObjectStore.createIndex()
)。 IDBIndex.locale
只读 非标准 已弃用-
返回索引的区域设置(例如
en-US
或pl
),如果在创建时指定了locale
值(请参阅options
参数到IDBObjectStore.createIndex()
)。 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
在索引上打开一个基本游标——这与使用IDBObjectStore.openCursor
直接在ObjectStore
上打开游标相同,除了返回的记录是根据索引排序的,而不是根据主键排序的。
最后,我们遍历每个记录,并将数据插入 HTML 表格中。有关完整的可工作示例,请参阅我们的IndexedDB-examples 演示存储库(查看示例)。
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 |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。
另请参阅
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 设置键范围:
IDBKeyRange
- 检索和更改数据:
IDBObjectStore
- 使用游标:
IDBCursor
- 参考示例:待办事项通知(查看示例)。