Indexeddb:在运行时之前未知索引名称时从多个索引获取数据

时间:2014-06-05 22:53:49

标签: javascript html5 indexeddb

我有一个indexedDb,它有以下索引

objectStore.createIndex('course', 'course', {unique: false});
objectStore.createIndex('year', 'year', {unique: false});
objectStore.createIndex('session', 'session', {unique: false});
objectStore.createIndex('rollnumber', 'rollnumber', {unique: false});
objectStore.createIndex('name', 'name', {unique: false});

现在我有一个表单,其中包含所有上述索引的字段。用户填写表单,我必须根据用户填写的任何字段过滤结果。因此,如果用户只填充coursesession字段,那么我必须返回与这两个索引匹配的所有对象。

关系版本很简单

SELECT * FROM college WHERE session = ? AND course = ?

我可以根据用户填写的字段准备查询。但是在indexedDb中我需要事先知道这个组合,这对于许多不同的可能组合是不可能的。

对于上述情况,需要这样的事情

objectStore.createIndex('courseSession', ['course', 'session'], {unique: false});

除了这不是唯一可能的组合之外,这一切都很好和花花公子,用户可以填写它想要缩小结果的任意数量的字段。那我该怎么做呢?我不能写出这5个字段的2 ^ 5(或其他)可能的组合。

我发现this问题是相关的。但它并没有解决我不知道我需要的组合的问题,因此我无法提前创建索引。

TL; DR:我事先并不知道我想要搜索数据存储区的索引是什么,所以我无法创建索引。

1 个答案:

答案 0 :(得分:2)

  

SELECT * FROM college WHERE session =? AND course =?

这并不意味着sessioncourse上有索引。即使没有索引,它也能正常工作。您可以在IndexedDB中执行相同的操作,只需在整个数据库中搜索与您的约束匹配的对象。

  

我无法写出这5个字段的2 ^ 5(或其他)可能的组合。

实际上"5 choose 2"是10种可能的组合。所以...它并不是那么多。您可以尝试添加所有可能的组合。

替代策略:用户输入2个(或更多)约束,您只需对其中一个进行索引,然后手动搜索其他约束的所有结果。