IDBIndex: count() 方法

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

注意:此功能在 Web Workers 中可用。

count() 方法是 IDBIndex 介面的一部分,它會返回一個 IDBRequest 物件,並在單獨的執行緒中返回指定鍵範圍內的記錄數。

語法

js
count()
count(key)

引數

key 可選

用於識別要計數的記錄的鍵或鍵範圍。

返回值

一個 IDBRequest 物件,該物件將觸發與此操作相關的後續事件。

如果操作成功,則請求的 result 屬性的值將是與給定鍵或鍵範圍匹配的記錄數。

異常

此方法可能會丟擲以下型別之一的DOMException

TransactionInactiveError DOMException

如果此 IDBIndex 的事務處於非活動狀態,則會丟擲此異常。

DataError DOMException

如果提供的鍵或鍵範圍包含無效鍵,則會丟擲此異常。

InvalidStateError DOMException

如果 IDBIndex 已被刪除或移除,則會丟擲此異常。

示例

在以下示例中,我們打開了一個事務和一個物件儲存,然後從一個簡單的聯絡人資料庫中獲取了索引 lName。然後,我們使用 IDBIndex.openCursor 在該索引上打開了一個基本遊標——這與直接在 ObjectStore 上使用 IDBObjectStore.openCursor 開啟遊標的工作方式相同,但返回的記錄是根據索引排序的,而不是主鍵。

然後使用 myIndex.count() 來計算索引中的記錄數,並在其成功回撥返回時將該請求的結果記錄到控制檯中。

最後,我們遍歷每條記錄,並將資料插入 HTML 表中。有關完整的可執行示例,請參閱我們的 IndexedDB-examples demo 倉庫線上檢視示例)。

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

  const myIndex = objectStore.index("lName");
  const countRequest = myIndex.count();
  countRequest.onsuccess = () => {
    console.log(countRequest.result);
  };

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

規範

規範
Indexed Database API 3.0
# ref-for-dom-idbindex-count①

瀏覽器相容性

另見