IDBObjectStore: метод createIndex()
Базовая реализация Широко доступна
Эта функция хорошо реализована и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2021 года.
Примечание: Эта функция доступна в Web Workers.
Метод createIndex() интерфейса IDBObjectStore создаёт и возвращает новый объект IDBIndex в подключённой базе данных. Он создаёт новое поле/столбец, определяющий новую точку данных для каждой записи в базе данных.
Обратите внимание, что индексы IndexedDB могут содержать любой тип данных JavaScript; IndexedDB использует алгоритм структурированного клонирования для сериализации сохранённых объектов, что позволяет хранить простые и сложные объекты.
Обратите внимание, что этот метод должен вызываться только из обработчика обратного вызова в режиме VersionChange транзакции.
Синтаксис
createIndex(indexName, keyPath) createIndex(indexName, keyPath, options)
Параметры
indexName-
Имя создаваемого индекса. Обратите внимание, что можно создать индекс с пустым именем.
keyPath-
Путь к ключу для используемого индекса. Обратите внимание, что можно создать индекс с пустым
keyPath, а также передать последовательность (массив) в качествеkeyPath. optionsНеобязательно-
Объект, который может содержать следующие свойства:
unique-
Если
true, индекс не позволит иметь дублирующие значения для одного ключа. По умолчаниюfalse. multiEntry-
Если
true, индекс добавит запись в индекс для каждого элемента массива, когдаkeyPathразрешается в массив. Еслиfalse, он добавит одну запись, содержащую массив. По умолчаниюfalse. localeНестандартный Устаревший-
Позволяет указать локаль для индекса. Любые операции сортировки данных с помощью диапазонов ключей будут затем подчиняться правилам сортировки этой локали. Вы можете указать её значение тремя способами:
-
string: Строка, содержащая конкретный код локали, напримерen-US, илиpl. -
auto: Будет использоваться локаль по умолчанию для платформы (может быть изменена настройками пользователя). -
nullилиundefined: Если локаль не указана, будет использоваться обычная JavaScript сортировка — не учитывающая локаль.
-
Возвращаемое значение
Объект IDBIndex: вновь созданный индекс.
Исключения
Этот метод может вызвать исключение DOMException одного из следующих типов:
-
ConstraintErrorDOMException -
Выбрасывается, если индекс с таким же именем уже существует в базе данных. Имена индексов чувствительны к регистру.
-
InvalidAccessErrorDOMException -
Выбрасывается, если предоставленный путь к ключу является последовательностью, а
multiEntryустановлено вtrueв объектеobjectParameters. -
InvalidStateErrorDOMException -
Выбрасывается, если:
- Метод не был вызван из обработчика обратного вызова в режиме
versionchangeтранзакции, т.е. изнутри обработчикаonupgradeneeded. - Магазин объектов был удалён.
- Метод не был вызван из обработчика обратного вызова в режиме
-
SyntaxErrorDOMException -
Выбрасывается, если предоставленный
keyPathне является валидным путем к ключу. -
TransactionInactiveErrorDOMException -
Выбрасывается, если транзакция, к которой принадлежит этот
IDBObjectStore, не активна (например, была удалена или удалена). В Firefox до версии 41 в этом случае также поднималосьInvalidStateError, что было вводящим в заблуждение; это сейчас исправлено (см. отчёт об ошибке Firefox 1176165.)
Примеры
В следующем примере показано использование обработчика onupgradeneeded для обновления структуры базы данных, если загружается база данных с более высокой версией. createIndex() используется для создания новых индексов в магазине объектов. Для полного рабочего примера см. наше приложение To-do Notifications (просмотреть пример онлайн).
let db;
// Let us open our database
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
// Two event handlers for opening the database.
DBOpenRequest.onerror = (event) => {
note.appendChild(document.createElement("li")).textContent =
"Error loading database.";
};
DBOpenRequest.onsuccess = (event) => {
note.appendChild(document.createElement("li")).textContent =
"Database initialized.";
// store the result of opening the database in the db variable.
// This is used a lot below.
db = request.result;
// Run the displayData() function to populate the task list with
// all the to-do list data already in the IDB
displayData();
};
// This handler fires when a new database is created and indicates
// either that one has not been created before, or a new version
// was submitted with window.indexedDB.open(). (See above.)
// It is only implemented in recent browsers.
DBOpenRequest.onupgradeneeded = (event) => {
const db = event.target.result;
db.onerror = (event) => {
note.appendChild(document.createElement("li")).textContent =
"Error loading database.";
};
// Create an objectStore for this database
const objectStore = db.createObjectStore("toDoList", {
keyPath: "taskTitle",
});
// define what data items the objectStore will contain
objectStore.createIndex("hours", "hours", { unique: false });
objectStore.createIndex("minutes", "minutes", { unique: false });
objectStore.createIndex("day", "day", { unique: false });
objectStore.createIndex("month", "month", { unique: false });
objectStore.createIndex("year", "year", { unique: false });
objectStore.createIndex("notified", "notified", { unique: false });
};
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
createIndex |
23 | 12 | 10 | 15 | 8 | 25 | 22 | 14 | 8 | 1.5 | 4.4 |
options_locale_parameter |
Нет | Нет | 43 | Нет | Нет | Нет | 43 | Нет | Нет | Нет | Нет |
См. также
- Использование IndexedDB
- Запуск транзакций:
IDBDatabase - Использование транзакций:
IDBTransaction - Установка диапазона ключей:
IDBKeyRange - Извлечение и изменение данных:
IDBObjectStore - Использование курсоров:
IDBCursor - Пример справочника: To-do Notifications (Просмотреть пример онлайн).
© 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/IDBObjectStore/createIndex