IDBIndex:唯一属性

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

unique 只读属性返回一个布尔值,表示索引是否允许重复键。

这在创建索引时决定,使用 IDBObjectStore.createIndex 方法。此方法采用一个可选参数 unique,如果设置为 true,则表示索引将无法接受重复条目。

价值

布尔值

价值 效果
true 当前索引不允许键的重复值。
false 当前索引允许重复的键值。

示例

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

索引的唯一状态将记录到控制台:它应该返回 false

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

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

  const myIndex = objectStore.index("lName");
  console.log(myIndex.unique);

  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
# dom-idbindex-unique

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅