Javascript:使用多个索引搜索 indexeddb

标签 javascript indexeddb web-sql

我想从 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? 例如,我在阅读 documentation 时注意到在 indexedDb 中,所有示例一次只查询一个索引。所以你可以这样做

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

但是我需要同时查询多个索引!

我还发现了一些关于 compound indexes 的有趣帖子,但它们仅在您查询复合索引中的所有字段时才有效。

最佳答案

对于您的示例,复合索引仍然有效,但需要两个复合索引

 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'])

索引可以按任何顺序排列,但最具体的顺序最有效率。

或者,您也可以使用 key joining .键连接需要四个(单个)索引。四个索引占用的存储空间更小,更通用。例如,下面的查询需要另一个复合索引

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

键连接仍然适用于该查询。

关于Javascript:使用多个索引搜索 indexeddb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16501459/

相关文章:

连接 IndexedDB 和 WebSQL 的 JavaScript 库

javascript - 将数据库下载到本地文件系统并使用 opendatabase 导致没有这样的表错误消息

javascript - 在索引数据库中使用游标

javascript - 如何使用 ydn-db-fulltext 为数组中的子对象属性建立索引?

asp.net - 如何通过 Visual Studio 2008 在 Firefox 中调试 JavaScript?

javascript - 在非 onionified Cycle.js 应用程序中使用 cycle-onionify

gwt - 对某些模型类禁用 gwt 混淆

jquery - localStorage 不再在 iOS 7 WebView 中工作

javascript - 如何选择 $(this) JQuery 选择器选择的元素内的第一个 div?

javascript - 这是 JavaScript 中的数组还是变量?