IDBIndex: unique-Eigenschaft

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 unique Schreibgeschützte-Eigenschaft gibt einen booleschen Wert zurück, der angibt, ob der Index doppelte Schlüssel zulässt.

Dies wird beim Erstellen des Indexes mit der Methode IDBObjectStore.createIndex festgelegt. Diese Methode nimmt einen optionalen Parameter, unique, der, wenn er auf true gesetzt wird, bedeutet, dass der Index keine doppelten Einträge akzeptieren kann.

Wert

Ein boolescher Wert:

Wert Effekt
true Der aktuelle Index lässt keine doppelten Werte für einen Schlüssel zu.
false Der aktuelle Index erlaubt doppelte Schlüsselwerte.

Beispiele

Im folgenden Beispiel öffnen wir eine Transaktion und einen Objektspeicher und greifen dann auf den Index lName in einer einfachen Kontaktdatenbank zu. Wir öffnen dann einen einfachen Cursor auf dem Index mit IDBIndex.openCursor — dies funktioniert genauso wie das direkte Öffnen eines Cursors auf einem ObjectStore mit IDBObjectStore.openCursor, außer dass die zurückgegebenen Datensätze basierend auf dem Index und nicht auf dem Primärschlüssel sortiert werden.

Der einzigartige Status des Indexes wird in der Konsole protokolliert: Es sollte false zurückgegeben werden.

Schließlich durchsuchen wir jeden Datensatz und fügen die Daten in eine HTML-Tabelle ein. Für ein vollständiges Arbeitsbeispiel sehen Sie unser IndexedDB-Beispiele Demo-Repo (Beispiel live ansehen).

js
function displayDataByIndex() {
  tableEntry.textContent = "";
  const transaction = db.transaction(["contactsList"], "readonly");
  const objectStore = transaction.objectStore("contactsList");

  const myIndex = objectStore.index("lName");
  console.log(myIndex.unique);

  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.");
    }
  };
}

Spezifikationen

Specification
Indexed Database API 3.0
# dom-idbindex-unique

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch