使用Javascript:搜索IndexedDB的使用多个索引([removed] Searchin

2019-09-02 15:55发布

我想改变的WebSQL到IndexedDB的。 然而,如何将做一个SQL查询,如

SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com'
SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com' and age = 30
SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com' and name = 'Bill'
etc

与IndexedDB的? 例如,我在阅读注意到文档索引资料中,所有的例子只在一次查询一个索引。 所以,你可以做

var index = objectStore.index("ssn");
index.get("444-44-4444").onsuccess = function(event) {
     alert("Name is " + event.target.result.name);
};

但我需要在同一时间查询多个指标!

我也发现的一些有趣的帖子复合索引 ,但他们只如果查询的复合索引的所有字段工作。

Answer 1:

对于你的榜样,复合索引仍然可以工作,但需要两个复合索引

 objectStore.createIndex('ssn, email, age', ['ssn', 'email', 'age']); // corrected
 objectStore.createIndex('ssn, email, name', ['ssn', 'email', 'name'])

而这样的查询

 keyRange = IDBKeyRange.bound(
     ['444-44-4444', 'bill@bill@company.com'],
     ['444-44-4444', 'bill@bill@company.com', '']) 
 objectStore.index('ssn, email, age').get(keyRange)
 objectStore.index('ssn, email, age').get(['444-44-4444', 'bill@bill@company.com', 30])
 objectStore.index('ssn, email, name').get(['444-44-4444', 'bill@bill@company.com', 'Bill'])

索引可以以任意顺序排列,但如果最具体的是第一位的是最有效的。

另外,您也可以使用键连接 。 重点加入需要4路(单)索引。 四项指标需要更少的存储空间和更普遍。 例如,下面的查询需要另一种化合物指数

SELECT * FROM customers WHERE ssn = '444-44-4444' and name = 'Bill' and age = 30

关键还是加入该查询工作。



文章来源: Javascript: Searching indexeddb using multiple indexes