IndexedDB - 索引
索引是一种对象存储,用于从指定属性存储的引用对象中检索数据。 尽管索引位于引用对象存储内部并且包含相同的数据,但它使用指定的属性作为其键路径,而不是引用存储的主键。
索引用于定义数据的唯一约束,它们是在创建对象存储时创建的。 要创建索引,请在对象存储实例上调用 createIndex 方法 −
语法
var myIDBIndex = objectStore.createIndex(indexName, keyPath); var myIDBIndex = objectStore.createIndex(indexName, keyPath, objectParameters);
该方法创建并返回一个索引对象。 该方法创建一个采用以下参数的索引 −
Index name − 索引的名称。
Keypath − 我们在这里提到主键。
Object Parameters − 有两个对象参数。
Unique − 无法添加重复值。
Multi entry − 如果为 true,则当 keyPath 解析为数组时,索引将为每个数组元素在索引中添加一个条目。 如果为 false,它将添加一个包含数组的条目。
示例
以下示例显示了对象存储中索引的实现 −
<!DOCTYPE html> <html lang="en"> <head> <title>Document</title> </head> <body> <script> const request = indexedDB.open("botdatabase",1); request.onupgradeneeded = function(){ const db = request.result; const store = db.createObjectStore("bots",{ keyPath: "id"}); store.createIndex("branch_db",["branch"],{unique: false}); } request.onsuccess = function(){ document.write("database opened successfully"); const db = request.result; const transaction=db.transaction("bots","readwrite"); const store = transaction.objectStore("bots"); const branchIndex = store.index("branch_db"); store.add({id: 1, name: "jason",branch: "IT"}); store.add({id: 2, name: "praneeth",branch: "CSE"}); store.add({id: 3, name: "palli",branch: "EEE"}); store.add({id: 4, name: "abdul",branch: "IT"}); store.put({id: 4, name: "deevana",branch: "CSE"}); transaction.oncomplete = function(){ db.close; } } </script> </body> </html>
输出
branchIndex: 1 ['CSE'] 0: "CSE" length: 1 4 {id: 4, name: 'deevana', branch: 'CSE'} branch: "CSE" id: 4 name: "deevana" 2 ['EEE'] 0: "EEE" length: 1 3 {id: 3, name: 'palli', branch: 'EEE'} branch: "EEE" id: 3 name: "palli" 3 ['IT'] 0: "IT" length: 1 1 {id: 1, name: 'jason', branch: 'IT'} branch: "IT" id: 1 name: "jason"