Javascript:使用多个索引搜索indexeddb
Javascript: Searching indexeddb using multiple indexes
我想从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
with IndexedDB ?例如,我在阅读indexedDb的文档时注意到,所有的示例一次只查询一个索引。所以你可以输入
var index = objectStore.index("ssn");
index.get("444-44-4444").onsuccess = function(event) {
alert("Name is " + event.target.result.name);
};
但是我需要同时查询多个索引!
我也发现了一些关于复合索引的有趣帖子,但它们只有在你查询复合索引中的所有字段时才能工作。
对于您的示例,复合索引仍然有效,但需要两个复合索引
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'])
索引可以按任何顺序排列,但最具体的放在前面是最有效的。
或者,您也可以使用键连接。键连接需要四个(单个)索引。四个索引占用的存储空间更少,而且更通用。例如,下面的查询需要另一个复合索引
SELECT * FROM customers WHERE ssn = '444-44-4444' and name = 'Bill' and age = 30
键连接对该查询仍然有效。
相关文章:
- 在JavaScript中搜索文本并获取其所有开始和结束索引
- 如何有效地搜索具有介于 jquery 之间的索引的 name 属性的输入
- 在 2D Javascript 数组中搜索值索引
- 替代使用搜索或索引
- 索引数组 JavaScript 中索引的搜索值
- ElasticSearch - 从 Javascript 搜索 3 个索引
- 如何通过搜索选择HTML表的行索引
- Javascript:使用多个索引搜索indexeddb
- 用于jqGrid搜索的任意索引(列名)
- 从索引页获取搜索位置缩放到地图页面上的位置
- 如何搜索多个索引(es)相同的值在javascript数组
- 使用javascript搜索有限的手动索引
- 使用数组索引搜索字符串字母
- 如何通过文本搜索返回JSON数组中项目的索引位置?
- 如何在浏览器中高效地为索引搜索散列图像
- 通过选项文本搜索选项索引
- 在javascript中搜索并找到多维数组中字符串的索引
- 如何使用搜索或匹配自动填充拼接(索引开始、结束)
- 在IndexedDB中搜索复合索引
- 从数组索引搜索 JS 创建的未定义变量