高级查询
where 条件、多字段排序、自定义过滤、复杂范围查询。
storage.query({
where: { field: 'age', operator: 'between', value: [25, 35] },
})
浏览器原生 · 零依赖 · 类型安全
通用 IndexedDB 存储方案:任何数据类型、强大查询、自动清理。Promise 异步 API,与 async/await 无缝集成。
为什么是 IndexedDB Storage
把原生 IndexedDB 的样板代码封装掉,留下干净的 Promise API 与类型安全。
where 条件、多字段排序、自定义过滤、复杂范围查询。
storage.query({
where: { field: 'age', operator: 'between', value: [25, 35] },
})
基于容量或年龄的自动保留机制,定期清理过期数据。
{
maxRecords: 1000,
retentionTime: 7 * 24 * 60 * 60 * 1000,
cleanupInterval: 60 * 60 * 1000,
}
按 dbName + storeName 自动复用连接,相同配置不再重复初始化。
// 相同配置 → 复用同一实例
new IndexedDBStorage({ dbName: 'app', storeName: 'users' }, cfg)
new IndexedDBStorage({ dbName: 'app', storeName: 'users' }, cfg)
用法
初始化 → 保存 → 查询 → 更新 → 删除,全是 Promise。
import { IndexedDBStorage } from '@chaeco/indexed-db-storage';
const storage = new IndexedDBStorage<User>(
{ dbName: 'my-app', storeName: 'users' },
{ storeName: 'users', keyPath: 'id', autoIncrement: true },
);
await storage.init();
await storage.save({ name: 'John Doe', email: 'john@example.com' });
const users = await storage.query({ limit: 10 });
const user = await storage.get(1);
await storage.update({ id: 1, name: 'Jane Doe' });
await storage.delete(1);
// 按索引查询
const products = await storage.query({
indexName: 'category',
range: IDBKeyRange.only('electronics'),
limit: 20,
});
// 范围查询
const expensive = await storage.query({
indexName: 'price',
range: IDBKeyRange.lowerBound(1000),
limit: 10,
});
高级查询
等值、比较、范围、字符串匹配——全部内置。
| 操作符 | 说明 | 示例 |
|---|---|---|
eq | 等值 | { field: 'age', operator: 'eq', value: 25 } |
gt / gte / lt / lte | 比较 | { operator: 'gt', value: 30 } |
between | 范围 | { operator: 'between', value: [25, 35] } |
contains | 包含 | { field: 'name', operator: 'contains', value: 'hn' } |
startsWith | 前缀 | { field: 'name', operator: 'startsWith', value: 'Jo' } |