IDBIndex

Baseline Widely available *

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

* Some parts of this feature may have varying levels of support.

Note: This feature is available in Web Workers.

Giao diện IDBIndex của IndexedDB API cung cấp quyền truy cập bất đồng bộ vào một index trong cơ sở dữ liệu. Index là một dạng object store dùng để tra cứu các bản ghi trong một object store khác, được gọi là object store được tham chiếu. Bạn dùng giao diện này để truy xuất dữ liệu.

Bạn có thể truy xuất các bản ghi trong object store thông qua khóa chính hoặc bằng cách dùng index. Index cho phép bạn tra cứu bản ghi trong object store bằng các thuộc tính của giá trị trong bản ghi của object store thay vì chỉ dựa vào khóa chính.

Index là một kho lưu trữ khóa-giá trị bền vững, trong đó phần giá trị của các bản ghi là phần khóa của một bản ghi trong object store được tham chiếu. Các bản ghi trong index được tự động điền khi các bản ghi trong object store được tham chiếu được chèn, cập nhật hoặc xóa. Mỗi bản ghi trong index chỉ có thể trỏ đến một bản ghi trong object store được tham chiếu, nhưng nhiều index có thể tham chiếu cùng một object store. Khi object store thay đổi, tất cả index tham chiếu đến object store đó đều được cập nhật tự động.

Bạn có thể lấy một tập khóa trong một phạm vi. Để tìm hiểu thêm, xem IDBKeyRange.

Thuộc tính thể hiện

IDBIndex.isAutoLocale Read only Non-standard Deprecated

Trả về một giá trị boolean cho biết index có giá trị localeauto hay không khi được tạo (xem tham số options của IDBObjectStore.createIndex().)

IDBIndex.locale Read only Non-standard Deprecated

Trả về locale của index, ví dụ en-US hoặc pl, nếu locale đã được chỉ định khi tạo (xem tham số options của IDBObjectStore.createIndex().)

IDBIndex.name

Tên của index này.

IDBIndex.objectStore Read only

Tên của object store được index này tham chiếu.

IDBIndex.keyPath Read only

Đường dẫn khóa của index này. Nếu là null, index này sẽ không được tự động điền.

IDBIndex.multiEntry Read only

Ảnh hưởng đến cách index hoạt động khi kết quả đánh giá key path của index trả về một mảng. Nếu là true, sẽ có một bản ghi trong index cho mỗi phần tử của mảng khóa. Nếu là false, sẽ có một bản ghi cho mỗi khóa là một mảng.

IDBIndex.unique Read only

Nếu là true, index này không cho phép các giá trị trùng lặp cho một khóa.

Phương thức thể hiện

Kế thừa từ: EventTarget

IDBIndex.count()

Trả về một đối tượng IDBRequest và, trong một luồng riêng biệt, trả về số lượng bản ghi trong một phạm vi khóa.

IDBIndex.get()

Trả về một đối tượng IDBRequest và, trong một luồng riêng biệt, tìm giá trị trong object store được tham chiếu tương ứng với khóa đã cho hoặc giá trị tương ứng đầu tiên, nếu key là một IDBKeyRange.

IDBIndex.getKey()

Trả về một đối tượng IDBRequest và, trong một luồng riêng biệt, tìm khóa đã cho hoặc khóa chính, nếu key là một IDBKeyRange.

IDBIndex.getAll()

Trả về một đối tượng IDBRequest và, trong một luồng riêng biệt, tìm tất cả giá trị khớp trong object store được tham chiếu tương ứng với khóa đã cho hoặc nằm trong phạm vi, nếu key là một IDBKeyRange.

IDBIndex.getAllKeys()

Trả về một đối tượng IDBRequest và, trong một luồng riêng biệt, tìm tất cả khóa khớp trong object store được tham chiếu tương ứng với khóa đã cho hoặc nằm trong phạm vi, nếu key là một IDBKeyRange.

IDBIndex.getAllRecords() Experimental

Trả về một đối tượng IDBRequest và, trong một luồng riêng biệt, tìm tất cả bản ghi khớp trong object store được tham chiếu (bao gồm khóa index, khóa chính và giá trị) tương ứng với khóa đã cho hoặc nằm trong phạm vi, nếu key là một IDBKeyRange.

IDBIndex.openCursor()

Trả về một đối tượng IDBRequest và, trong một luồng riêng biệt, tạo một cursor trên phạm vi khóa đã chỉ định.

IDBIndex.openKeyCursor()

Trả về một đối tượng IDBRequest và, trong một luồng riêng biệt, tạo một cursor trên phạm vi khóa đã chỉ định, được sắp xếp theo index này.

Ví dụ

Trong ví dụ sau, chúng ta mở một transaction và một object store, rồi lấy index lName từ một cơ sở dữ liệu liên hệ đơn giản. Sau đó, chúng ta mở một cursor cơ bản trên index bằng IDBIndex.openCursor - thao tác này hoạt động giống như mở cursor trực tiếp trên một ObjectStore bằng IDBObjectStore.openCursor, ngoại trừ việc các bản ghi được trả về được sắp xếp theo index, không phải theo khóa chính.

Cuối cùng, chúng ta lặp qua từng bản ghi và chèn dữ liệu vào một bảng HTML. Để xem ví dụ hoàn chỉnh đang chạy, hãy xem kho demo IndexedDB-examples của chúng tôi (Xem ví dụ trực tiếp).

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

  const myIndex = objectStore.index("lName");
  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("Tất cả các mục đã được hiển thị.");
    }
  };
}

Thông số kỹ thuật

Specification
Indexed Database API 3.0
# index-interface

Tương thích trình duyệt

Xem thêm