如何从Dexiejs IndexedDB表中获取单列数据(仅提取price值)
DexieJS提取product表所有price字段的实现方式
当前db.product.toArray()会异步返回product表的全量记录数组,只要对返回结果做字段映射提取,就能得到目标格式的price数组,有两种常用实现方案:
- 基础通用实现
先等待查询拿到全量记录,再通过原生数组的map方法遍历提取每条记录的price值:async function getPriceList() { // 等待IndexedDB查询返回全量数据 const productList = await db.product.toArray() // 遍历提取price字段 const priceList = productList.map(item => item.price) return priceList } // 调用后拿到的结果即为 [40, 60] const priceResult = await getPriceList() - 性能优化实现
不需要先拉取整行的全量字段再做遍历,直接利用Dexie集合的内置映射能力,在数据读取阶段就完成price字段提取,减少不必要的内存开销:const priceListPromise = db.product .toCollection() .map(item => item.price) const priceResult = await priceListPromise
需要注意的细节:
- Dexie的所有查询接口都是异步返回Promise,必须搭配
await或者.then()处理返回值,直接同步取会拿到Promise对象而不是实际的数组 - 如果表中存在未录入price字段的脏数据,可以在映射逻辑里加兜底,比如
item => item.price ?? 0,不然结果数组里会出现undefined的无效值
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

