IDBIndex:count() 方法

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

IDBIndex 接口的count() 方法返回一个IDBRequest 对象,并在单独的线程中返回键范围内记录的数量。

语法

js
count()
count(key)

参数

key 可选

标识要计数的记录的键或键范围。

返回值

一个IDBRequest 对象,后续与该操作相关的事件将在其上触发。

如果操作成功,则请求的result 属性的值是与给定键或键范围匹配的记录数。

异常

此方法可能会引发以下类型之一的DOMException

TransactionInactiveError DOMException

如果此IDBIndex 的事务处于非活动状态,则抛出此异常。

DataError DOMException

如果提供的键或键范围包含无效键,则抛出此异常。

InvalidStateError DOMException

如果IDBIndex 已被删除,则抛出此异常。

示例

在下面的示例中,我们打开一个事务和一个对象存储,然后从一个简单的联系人数据库中获取索引 lName。然后,我们使用IDBIndex.openCursor 在索引上打开一个基本游标——这与使用IDBObjectStore.openCursor 直接在 ObjectStore 上打开游标相同,只是返回的记录是根据索引排序的,而不是根据主键排序的。

然后使用 myIndex.count() 统计索引中的记录数,并在其成功回调返回时将该请求的结果记录到控制台。

最后,我们遍历每条记录,并将数据插入 HTML 表格中。有关完整的运行示例,请参阅我们的IndexedDB-examples 演示库查看示例)。

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①

浏览器兼容性

BCD 表仅在启用了 JavaScript 的浏览器中加载。

另请参阅