我在IndexedDB中有一个存储,其中Key路径用于属性Id,并且我还有一个名为 IndexedWords 的索引数组
[{ Id: 1, IndexedWords: ['Foo', 'bar'] }, { Id: 2, IndexedWords: [] } }
我试图找到存储中的所有空行,这是通过找到所有具有 IndexedWords 中的值的Id+存储的所有Id,并对这些数组求交集来实现的。这个想法是可行的,但问题是我接收 IndexedWords x次的Id,其中x与 IndexedWords 中的条目数匹配,当我有5000行,每行有100+个单词时,数组变得越来越大,使用起来越来越困难。有没有办法在查询中只从IndexedDB返回不同的Id?当前代码如下
var trans = db.transaction(storeName, IDBTransaction.READ_ONLY);
var index = trans.objectStore(storeName).index("IndexedWords");
var getAllRequest = index.getAllKeys();
getAllRequest.onsuccess = function (evt) {
items = evt.target.result;
}
2条答案
按热度按时间wpcxdonn1#
如果我理解了您的问题,您可以尝试在
IndexedWords
上创建一个多条目索引,然后遍历该索引的唯一键。ecfdbz9o2#
我希望这会有所帮助,而不会增加IndexedDB API的开销,因为我无法让您的IndexedDB示例代码正常工作。
逐一查看文字,并建立包含文字做为索引键的新对象,如果该文字位于项目的IndexedWords中,则使用Id数组做为值。
创建一个空对象和一些示例数据
从示例数据中创建一个包含所有唯一单词的平面数组,并从包含所有单词的数组中删除重复单词,以获得不同单词的列表。
迭代每个唯一的单词,并创建一个新对象,该对象以单词为键,以Id数组为值