gpt4 book ai didi

Javascript:使用多个索引搜索 indexeddb

转载 作者:可可西里 更新时间:2023-11-01 01:24:22 26 4
gpt4 key购买 nike

我想从 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com