IDBIndex 对象

IDBIndex 对象代表数据库的索引,通过这个对象可以获取数据库里面的记录。数据记录的主键默认就是带有索引,IDBIndex 对象主要用于通过除主键以外的其他键,建立索引获取对象。

IDBIndex 是持久性的键值对存储。只要插入、更新或删除数据记录,引用的对象库中的记录,索引就会自动更新。

IDBObjectStore.index()方法可以获取 IDBIndex 对象。

  1. var transaction = db.transaction(['contactsList'], 'readonly');
  2. var objectStore = transaction.objectStore('contactsList');
  3. var myIndex = objectStore.index('lName');
  4. myIndex.openCursor().onsuccess = function (event) {
  5. var cursor = event.target.result;
  6. if (cursor) {
  7. var tableRow = document.createElement('tr');
  8. tableRow.innerHTML = '<td>' + cursor.value.id + '</td>'
  9. + '<td>' + cursor.value.lName + '</td>'
  10. + '<td>' + cursor.value.fName + '</td>'
  11. + '<td>' + cursor.value.jTitle + '</td>'
  12. + '<td>' + cursor.value.company + '</td>'
  13. + '<td>' + cursor.value.eMail + '</td>'
  14. + '<td>' + cursor.value.phone + '</td>'
  15. + '<td>' + cursor.value.age + '</td>';
  16. tableEntry.appendChild(tableRow);
  17. cursor.continue();
  18. } else {
  19. console.log('Entries all displayed.');
  20. }
  21. };

IDBIndex 对象有以下属性。

  • IDBIndex.name:字符串,索引的名称。
  • IDBIndex.objectStore:索引所在的对象仓库。
  • IDBIndex.keyPath:索引的主键。
  • IDBIndex.multiEntry:布尔值,针对keyPath为数组的情况,如果设为true,创建数组时,每个数组成员都会有一个条目,否则每个数组都只有一个条目。
  • IDBIndex.unique:布尔值,表示创建索引时是否允许相同的主键。

IDBIndex 对象有以下方法,它们都是异步的,立即返回的都是一个 IDBRequest 对象。

  • IDBIndex.count():用来获取记录的数量。它可以接受主键或 IDBKeyRange 对象作为参数,这时只返回符合主键的记录数量,否则返回所有记录的数量。
  • IDBIndex.get(key):用来获取符合指定主键的数据记录。
  • IDBIndex.getKey(key):用来获取指定的主键。
  • IDBIndex.getAll():用来获取所有的数据记录。它可以接受两个参数,都是可选的,第一个参数用来指定主键,第二个参数用来指定返回记录的数量。如果省略这两个参数,则返回所有记录。由于获取成功时,浏览器必须生成所有对象,所以对性能有影响。如果数据集比较大,建议使用 IDBCursor 对象。
  • IDBIndex.getAllKeys():该方法与IDBIndex.getAll()方法相似,区别是获取所有主键。
  • IDBIndex.openCursor():用来获取一个 IDBCursor 对象,用来遍历索引里面的所有条目。
  • IDBIndex.openKeyCursor():该方法与IDBIndex.openCursor()方法相似,区别是遍历所有条目的主键。