IDBИндекс
Базовая поддержка Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с сентября 2021 года.
Примечание: Эта функция доступна в Веб-воркерах.
IDBIndex интерфейс API 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 — это работает так же, как открытие курсора непосредственно на ObjectStore с помощью IDBObjectStore.openCursor, за исключением того, что возвращаемые записи сортируются по индексу, а не по первичному ключу.
Наконец, мы итерируем по каждой записи и вставляем данные в таблицу HTML. Для получения полного рабочего примера см. наш примеры IndexedDB (Просмотреть пример.)
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 |
Совместимость браузеров
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
IDBIndex |
2423–57 | 12 | 1610–16 | 15 | 8 | 2525–57 | 22 | 14 | 8 | 1.51.5–7.0 | 4.4≤37–57 |
count |
23 | 12 | 10 | 15 | 8 | 25 | 22 | 14 | 8 | 1.5 | 4.4 |
get |
23 | 12 | 10 | 15 | 8 | 25 | 22 | 14 | 8 | 1.5 | 4.4 |
getAll |
48 | 79 | 44 | 35 | 10.1 | 48 | 44 | 35 | 10.3 | 5.0 | 48 |
getAllKeys |
48 | 79 | 44 | 35 | 10.1 | 48 | 44 | 35 | 10.3 | 5.0 | 48 |
getKey |
23 | 12 | 10 | 15 | 8 | 25 | 22 | 14 | 8 | 1.5 | 4.4 |
isAutoLocale |
Нет | Нет | 43 | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
keyPath |
23 | 12 | 10 | 15 | 8 | 25 | 22 | 14 | 8 | 1.5 | 4.4 |
locale |
Нет | Нет | 43 | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
multiEntry |
23 | 12 | 10 | 15 | 8 | 25 | 22 | 14 | 8 | 1.5 | 4.4 |
name |
23 | 12 | 10 | 15 | 8 | 25 | 22 | 14 | 8 | 1.5 | 4.4 |
objectStore |
23 | 12 | 10 | 15 | 8 | 25 | 22 | 14 | 8 | 1.5 | 4.4 |
openCursor |
23 | 12 | 10 | 15 | 8 | 25 | 22 | 14 | 8 | 1.5 | 4.4 |
openKeyCursor |
23 | 12 | 10 | 15 | 8 | 25 | 22 | 14 | 8 | 1.5 | 4.4 |
unique |
23 | 12 | 10 | 15 | 8 | 25 | 22 | 14 | 8 | 1.5 | 4.4 |
worker_support |
23 | 12 | 37 | 15 | 10 | 25 | 37 | 14 | 10 | 1.5 | 4.4 |
См. также
- Использование IndexedDB
- Начало транзакций:
IDBDatabase - Использование транзакций:
IDBTransaction - Установка диапазона ключей:
IDBKeyRange - Получение и внесение изменений в данные:
IDBObjectStore - Использование курсоров:
IDBCursor - Пример ссылки: Уведомления о задачах (Просмотреть пример онлайн).
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex