为了账号安全,请及时绑定邮箱和手机立即绑定

在IndexedDB中,是否可以进行排序的复合查询?

在IndexedDB中,是否可以进行排序的复合查询?

米琪卡哇伊 2019-11-15 12:38:29
假设表格具有名称,ID,年龄,性别,学历等。ID是关键,并且该表也按名称,年龄和性别进行索引。我需要所有25岁以上的男学生,按其姓名排序。这在mySQL中很简单:    SELECT * FROM table WHERE age > 25 AND sex = "M" ORDER BY nameIndexDB允许创建索引并基于该索引对查询进行排序。但是它不允许多个查询,例如年龄和性别。我发现了一个名为queryIndexedDB(https://github.com/philikon/queryIndexedDB)的小型库,该库允许复合查询,但不提供排序结果。那么,在使用IndexedDB时,是否有一种方法可以进行排序的复合查询?
查看完整描述

3 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

我迟了几年,但我只想指出,乔什的答案只考虑了查询中“列”是索引的一部分的情况keyPath。


如果在索引的之外存在任何上述“列” keyPath,则必须在示例中创建的游标进行迭代的每个条目上测试涉及它们的条件。因此,如果您正在处理此类查询,或者您的索引不是unique,请准备编写一些迭代代码!


无论如何,我建议您检查一下BakedGoods,是否可以将查询表示为布尔表达式。


对于这些类型的操作,它将始终在焦点objectStore上打开游标,除非您执行严格的相等查询(x ===? y,假设x是objectStore或索引键),但它将避免编写自己的游标迭代的麻烦码:


bakedGoods.getAll({

    filter: "keyObj > 5 && valueObj.someProperty !== 'someValue'",

    storageTypes: ["indexedDB"],

    complete: function(byStorageTypeResultDataObj, byStorageTypeErrorObj){}

});

为了完全透明起见,BaikeGoods由moi维护。


查看完整回答
反对 回复 2019-11-15
  • 3 回答
  • 0 关注
  • 1797 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信