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①

浏览器兼容性

另见