IDBObjectStore: Methode createIndex()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2021.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Die createIndex()-Methode der IDBObjectStore-Schnittstelle erstellt und gibt ein neues IDBIndex-Objekt in der verbundenen Datenbank zurück. Sie erstellt ein neues Feld/Spalte, das einen neuen Datenpunkt für jeden Datensatz in der Datenbank definiert.

Beachten Sie, dass IndexedDB-Indizes jeden JavaScript-Datentyp enthalten können; IndexedDB verwendet den strukturierter Klon-Algorithmus, um gespeicherte Objekte zu serialisieren, was die Speicherung einfacher und komplexer Objekte ermöglicht.

Beachten Sie, dass diese Methode nur aus einem VersionChange-Transaktionsmodus-Callback aufgerufen werden darf.

Syntax

js
createIndex(indexName, keyPath)
createIndex(indexName, keyPath, options)

Parameter

indexName

Der Name des zu erstellenden Indexes. Beachten Sie, dass es möglich ist, einen Index mit einem leeren Namen zu erstellen.

keyPath

Der Schlüsselpfad, den der Index verwenden soll. Beachten Sie, dass es möglich ist, einen Index mit einem leeren keyPath zu erstellen und auch eine Sequenz (Array) als keyPath zu übergeben.

options Optional

Ein Objekt, das die folgenden Eigenschaften enthalten kann:

unique

Wenn true, erlaubt der Index keine doppelten Werte für einen einzelnen Schlüssel. Standardmäßig false.

multiEntry

Wenn true, wird der Index für jedes Array-Element einen Eintrag im Index hinzufügen, wenn der keyPath auf ein Array aufgelöst wird. Wenn false, wird ein einzelner Eintrag hinzugefügt, der das Array enthält. Standardmäßig false.

locale Nicht standardisiert Veraltet

Ermöglicht Ihnen, eine Locale für den Index anzugeben. Alle Sortieroperationen, die über Schlüsselbereiche auf den Daten ausgeführt werden, befolgen dann die Sortierregeln dieser Locale. Sie können seinen Wert auf eine von drei Arten angeben:

  • string: Ein String, der einen spezifischen Locale-Code enthält, z.B. en-US oder pl.
  • auto: Die Standard-Locale der Plattform wird verwendet (kann durch Benutzeragenten-Einstellungen geändert werden).
  • null oder undefined: Wenn keine Locale angegeben ist, wird die normale JavaScript-Sortierung verwendet – nicht Locale-abhängig.

Rückgabewert

Ein IDBIndex-Objekt: der neu erstellte Index.

Ausnahmen

Diese Methode kann eine DOMException einer der folgenden Typen auslösen:

ConstraintError DOMException

Wird ausgelöst, wenn ein Index mit demselben Namen bereits in der Datenbank existiert. Indexnamen sind groß-/kleinschreibungssensitiv.

InvalidAccessError DOMException

Wird ausgelöst, wenn der angegebene Schlüsselpfad eine Sequenz ist und multiEntry im objectParameters-Objekt auf true gesetzt ist.

InvalidStateError DOMException

Wird ausgelöst, wenn:

  • Die Methode nicht aus einem versionchange-Transaktionsmodus-Callback aufgerufen wurde, d.h. aus einem onupgradeneeded-Handler.
  • Der Objekt-Store gelöscht wurde.
SyntaxError DOMException

Wird ausgelöst, wenn der angegebene keyPath kein gültiger Schlüsselpfad ist.

TransactionInactiveError DOMException

Wird ausgelöst, wenn die Transaktion, zu der dieses IDBObjectStore gehört, nicht aktiv ist (z.B. gelöscht oder entfernt wurde). In Firefox vor Version 41 wurde in diesem Fall ebenfalls ein InvalidStateError ausgelöst, was irreführend war; dies wurde nun behoben (siehe Firefox-Bug 1176165).

Beispiele

Im folgenden Beispiel sehen Sie den onupgradeneeded-Handler, der verwendet wird, um die Datenbankstruktur zu aktualisieren, wenn eine Datenbank mit einer höheren Versionsnummer geladen wird. createIndex() wird verwendet, um neue Indizes im Objekt-Store zu erstellen. Für ein vollständiges funktionsfähiges Beispiel sehen Sie sich unsere To-do Notifications-App an (Beispiel live ansehen).

js
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 });
};

Spezifikationen

Specification
Indexed Database API 3.0
# ref-for-dom-idbobjectstore-createindex①

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch