`title: IndexedDB keyPath 嵌套字段与索引实践``categories: Web 开发/前端/数据管理``keywords: IndexedDB,keyPath,嵌套字段,索引,查询``description: 使用 keyPath 指向嵌套字段并建立索引,提升基于对象内部属性的查询与排序能力。`初始化与索引function openDB() {
return new Promise((resolve, reject) => {
const r = indexedDB.open('nested-db', 1);
r.onupgradeneeded = () => {
const db = r.result;
if (!db.objectStoreNames.contains('items')) {
const s = db.createObjectStore('items', { keyPath: 'id' });
s.createIndex('byMetaType', 'meta.type');
}
};
r.onsuccess = () => resolve(r.result);
r.onerror = () => reject(r.error);
});
}
查询示例async function queryByMetaType(db, type) {
return new Promise((resolve, reject) => {
const tx = db.transaction('items', 'readonly');
const idx = tx.objectStore('items').index('byMetaType');
const out = [];
idx.openCursor(IDBKeyRange.only(type)).onsuccess = e => {
const c = e.target.result;
if (!c) return resolve(out);
out.push(c.value);
c.continue();
};
tx.onerror = () => reject(tx.error);
});
}

发表评论 取消回复