【问题标题】:Dexie.js getting results in a proper wayDexie.js 以正确的方式获得结果
【发布时间】:2021-02-25 05:12:45
【问题描述】:

我的问题是关于数据的方法。 假设我有 700 条文件记录表和一些数据,如日期、名称等。 示例:

{
blob:....,
name:'Name',
date:'13-11-2020',
type:'text/html'
....
}

现在我想在 vue 等 spa 应用程序中进行一些排序、过滤和分页。 执行 db.files.toArray(COSTOMFILTER,PAGINATION,SORTINNG 函数) 并返回查看或获取所有数据到数组并在那里排序会更好吗? list = await db.files.toArray().

还可以限制返回元素吗?例如,我不想在我的返回元素中出现 blob。 没有斑点 { 名称:'名称', 日期:'13-11-2020', 类型:'文本/html' …… } 或者返回答案只是指向内存中的blob?我问是因为文件可能很大。 感谢您的回答。

【问题讨论】:

    标签: dexie


    【解决方案1】:

    关于排序、过滤和分页的组合,没有灵丹妙药。一般:

    • 尝试通过使用compound index 结合多个字段的过滤和排序来尽可能挤出。
    • 如果数据集很大而页面很小但无法在索引中组合过滤和排序,请考虑仅使用索引进行排序并在此基础上进行过滤。在this page 上查看一些提示。

    关于选择字段的其他问题:在 IndexedDB 中,只能选择整个对象 (Collection.toArray()) 或仅选择主键 (Collection.primaryKeys()) - 而不是某些属性。不过 Blob 有点特别:它们(或至少应该)延迟加载,因此在您开始读取它们之前它们不应该耗尽内存。

    【讨论】:

    • 嘿,谢谢您的信息。现在我实现为过滤器和分页。有没有更好的解决方案来“缓存”部分结果?例如,现在每次分页更改时都会触发过滤器。 ` filesDB = await filesDB.orderBy(sortOptions).filter((file) => { return _filterElements(file, filters); }); if (isRev !== undefined) { filesDB.reverse(); } 常量计数 = 等待文件DB.count(); filesDB = await filesDB.offset(offset).limit(pagination.pageSize).toArray();返回{计数:计数,文件数据库:文件数据库};`
    • Dexie 没有缓存,所以你需要自己实现
    猜你喜欢
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多