Spec-Zone.ru › Web APIs

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 одного из следующих типов:

ConstraintError DOMException

Выбрасывается, если индекс с таким же именем уже существует в базе данных. Имена индексов чувствительны к регистру.

InvalidAccessError DOMException

Выбрасывается, если предоставленный путь к ключу является последовательностью, а multiEntry установлено в true в объекте objectParameters.

InvalidStateError DOMException

Выбрасывается, если:

  • Метод не был вызван из обработчика обратного вызова в режиме versionchange транзакции, т.е. изнутри обработчика onupgradeneeded.
  • Магазин объектов был удалён.
SyntaxError DOMException

Выбрасывается, если предоставленный keyPath не является валидным путем к ключу.

TransactionInactiveError DOMException

Выбрасывается, если транзакция, к которой принадлежит этот 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 });
};

Спецификации

Спецификация
Indexed Database API 3.0
# ref-for-dom-idbobjectstore-createindex①

Совместимость с браузерами

Рабочие столы Мобильные устройства
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API