Javascript 如何在IndexedDB中按属性查询对象?
我有一个IndexedDB对象存储,它存储以下结构的用户对象:Javascript 如何在IndexedDB中按属性查询对象?,javascript,cursor,indexeddb,Javascript,Cursor,Indexeddb,我有一个IndexedDB对象存储,它存储以下结构的用户对象: { id: 1, name: "Peter", role: "admin", password: "someHash"} 对象存储的创建如下所示: request.onupgradeneeded = function(event){ var db = request.result; var objectStore = db.createObjectStore("users", { keyPath: "id", au
{ id: 1, name: "Peter", role: "admin", password: "someHash"}
对象存储的创建如下所示:
request.onupgradeneeded = function(event){
var db = request.result;
var objectStore = db.createObjectStore("users", { keyPath: "id", autoIncrement: true });
objectStore.createIndex("uniqueNameIndex", "name", { unique: true });
objectStore.createIndex("roleIndex", "role", { unique: false });
};
我知道如何通过对象的键(id)检索对象,并且我还能够使用光标遍历所有对象
我现在想做的是获取所有具有特定角色的用户-例如检索所有管理员,而不迭代整个对象存储
我该怎么做
function forEachAdmin(db, callback) {
var ROLE_ADMIN = 'admin';
var tx = db.transaction('users');
var store = tx.objectStore('users');
var index = store.index('roleIndex');
var range = IDBKeyRange.only(ROLE_ADMIN);
var request = index.openCursor(range);
request.onsuccess = function() {
var cursor = this.result;
if(cursor) {
var adminUser = cursor.value;
callback(adminUser);
cursor.continue();
} else {
// No admins found or all admins iterated
}
};
}
function handleAdmin(user) {
console.log('Doing something with admin user %o', user);
}
var request = indexedDB.open('dbname');
request.onsuccess = function() {
var db = this.result;
forEachAdmin(db, handleAdmin);
};