IDBObjectStore: Methode createIndex()
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die Methode createIndex() des Interfaces
IDBObjectStore erstellt und gibt ein neues
IDBIndex-Objekt in der verbundenen Datenbank zurück. Sie erstellt ein neues
Feld/eine neue Spalte, das bzw. die einen neuen Datenpunkt für jeden Datenbankdatensatz definiert.
Beachten Sie, dass IndexedDB-Indizes jeden JavaScript-Datentyp enthalten können; IndexedDB verwendet den Structured-Clone-Algorithmus, um gespeicherte Objekte zu serialisieren, wodurch die Speicherung einfacher und komplexer Objekte möglich ist.
Beachten Sie, dass diese Methode nur aus einem Callback im VersionChange-Transaktionsmodus
aufgerufen werden darf.
Syntax
createIndex(indexName, keyPath)
createIndex(indexName, keyPath, options)
Parameter
indexName-
Der Name des zu erstellenden Index. Beachten Sie, dass es möglich ist, einen Index mit einem leeren Namen zu erstellen.
keyPath-
Der für den Index zu verwendende Schlüsselpfad. Beachten Sie, dass es möglich ist, einen Index mit einem leeren
keyPathzu erstellen und außerdem eine Sequenz (ein Array) alskeyPathzu übergeben. optionsOptional-
Ein Objekt, das die folgenden Eigenschaften enthalten kann:
unique-
Wenn
true, lässt der Index keine doppelten Werte für einen einzelnen Schlüssel zu. Standardmäßigfalse. multiEntry-
Wenn
true, fügt der Index für jedes Array-Element einen Eintrag im Index hinzu, wenn derkeyPathzu einem Array aufgelöst wird. Wennfalse, fügt er einen einzelnen Eintrag hinzu, der das Array enthält. Standardmäßigfalse. locale-
Ermöglicht die Angabe eines Gebietsschemas für den Index. Alle über Schlüsselbereiche für die Daten ausgeführten Sortiervorgänge folgen dann den Sortierregeln dieses Gebietsschemas. Sie können den Wert auf eine von drei Arten angeben:
string: Ein String, der einen bestimmten Gebietsschema-Code enthält, z. B.en-USoderpl.auto: Das Standardgebietsschema der Plattform wird verwendet (kann durch Einstellungen des User Agents geändert werden).nulloderundefined: Wenn kein Gebietsschema angegeben ist, wird die normale JavaScript-Sortierung verwendet — nicht gebietsschemabewusst.
Rückgabewert
Ein IDBIndex-Objekt: der neu erstellte Index.
Ausnahmen
Diese Methode kann eine DOMException eines der folgenden Typen auslösen:
ConstraintErrorDOMException-
Wird ausgelöst, wenn im Object Store bereits ein Index mit demselben Namen vorhanden ist. Indexnamen unterscheiden zwischen Groß- und Kleinschreibung.
InvalidAccessErrorDOMException-
Wird ausgelöst, wenn der bereitgestellte Schlüsselpfad eine Sequenz ist und
multiEntryimobjectParameters-Objekt auftruegesetzt ist. InvalidStateErrorDOMException-
Wird ausgelöst, wenn:
- Die Methode nicht aus einem Callback im
versionchange-Transaktionsmodus aufgerufen wurde, d.h. innerhalb einesonupgradeneeded-Handlers. - Der Object Store gelöscht wurde.
- Die Methode nicht aus einem Callback im
SyntaxErrorDOMException-
Wird ausgelöst, wenn der bereitgestellte
keyPathkein gültiger Schlüsselpfad ist. TransactionInactiveErrorDOMException-
Wird ausgelöst, wenn die Transaktion, zu der dieses
IDBObjectStoregehört, nicht aktiv ist (z. B. gelöscht oder entfernt wurde). In Firefox vor Version 41 wurde in diesem Fall ebenfalls einInvalidStateErrorausgelöst, was irreführend war; dies wurde inzwischen behoben (siehe Firefox-Bug 1176165.)
Beispiele
Im folgenden Beispiel sehen Sie,
wie der onupgradeneeded-Handler verwendet wird, um die
Datenbankstruktur zu aktualisieren, wenn eine Datenbank mit einer höheren Versionsnummer geladen wird.
createIndex() wird verwendet, um neue Indizes für den Object Store zu erstellen. Ein
vollständiges funktionsfähiges Beispiel finden Sie in unserer App To-do Notifications (Beispiel live ansehen).
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
| Spezifikation |
|---|
| Indexed Database API 3.0> # ref-for-dom-idbobjectstore-createindex①> |
Browser-Kompatibilität
Siehe auch
- IndexedDB verwenden
- Transaktionen starten:
IDBDatabase - Transaktionen verwenden:
IDBTransaction - Einen Schlüsselbereich festlegen:
IDBKeyRange - Daten abrufen und ändern:
IDBObjectStore - Cursor verwenden:
IDBCursor - Referenzbeispiel: To-do Notifications (Beispiel live ansehen).