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.isAutoLocaleRead only Non-standard Deprecated-
Trả về một giá trị boolean cho biết index có giá trị
localelàautohay không khi được tạo (xem tham sốoptionscủaIDBObjectStore.createIndex().) IDBIndex.localeRead only Non-standard Deprecated-
Trả về
localecủa index, ví dụen-UShoặcpl, nếulocaleđã được chỉ định khi tạo (xem tham sốoptionscủaIDBObjectStore.createIndex().) IDBIndex.name-
Tên của index này.
IDBIndex.objectStoreRead only-
Tên của object store được index này tham chiếu.
IDBIndex.keyPathRead 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.multiEntryRead 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.uniqueRead 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
IDBRequestvà, 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
IDBRequestvà, 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ếukeylà mộtIDBKeyRange. IDBIndex.getKey()-
Trả về một đối tượng
IDBRequestvà, trong một luồng riêng biệt, tìm khóa đã cho hoặc khóa chính, nếukeylà mộtIDBKeyRange. IDBIndex.getAll()-
Trả về một đối tượng
IDBRequestvà, 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ếukeylà mộtIDBKeyRange. IDBIndex.getAllKeys()-
Trả về một đối tượng
IDBRequestvà, 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ếukeylà mộtIDBKeyRange. IDBIndex.getAllRecords()Experimental-
Trả về một đối tượng
IDBRequestvà, 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ếukeylà mộtIDBKeyRange. IDBIndex.openCursor()-
Trả về một đối tượng
IDBRequestvà, 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
IDBRequestvà, 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).
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
- Sử dụng IndexedDB
- Bắt đầu transaction:
IDBDatabase - Sử dụng transaction:
IDBTransaction - Thiết lập một phạm vi khóa:
IDBKeyRange - Truy xuất và thay đổi dữ liệu của bạn:
IDBObjectStore - Sử dụng cursor:
IDBCursor - Ví dụ tham khảo: To-do Notifications (Xem ví dụ trực tiếp).