在rDBMS中,您可以在关系的索引列上select DISTINCT value
。它应该仅扫描INDEX 以减少I / O和时间。
问题:我如何在indexedDb中执行相同操作?
研究:我知道mongodb会这样做,但我无法找到indexedDb的任何信息。我预计getAllKeys会有所帮助,但它仅为我列出了PK值。我的情况?想象一下拥有一百万行的商店。一栏是欧盟国家,并且已编入索引。每个国家的分布变化很大。我想获得一个国家的行(一个国家没有行,其他国家也没有)。我授予用户执行每个国家/地区搜索的权限。但他有很多空的"按钮 - 没有行的国家/地区代码。相反,我想给他存储在Store中的县代码。所以我这样做:
var k = objstore.index("ISO");
var r = k.openCursor(IDBKeyRange.bound("A", "Z"));
var disp = [];
r.onsuccess = function(e) {
var cursor = e.target.result;
if(cursor) {
disp[cursor.key] = (disp[cursor.key] || 0) + 1 ;
cursor.continue();
} else {
console.log(disp);
}
但它很慢。并且它在整个商店中运行(它看起来最少 - 我消耗e.target.result.key
而value
也可用。这让我想起了IOT行为,但不是索引......
无论如何,谁知道只是告诉我 - 我可以使用索引想要的方式吗?..
我是一个对IndexedDb不熟悉的rDBMS人。对不起,如果我说完全不存在
答案 0 :(得分:1)
也许使用IDBCursor.prototype.continue的参数可以帮助你做你想做的事情?您可以传入要查找的下一个键作为附加参数。
或者,您也可以尝试将方向参数传递给IDBIndex.prototype.openCursor,例如" nextunique"。在这种情况下,"光标显示所有记录,不包括重复记录。如果存在具有相同键的多个记录,则仅检索迭代的第一个记录。它从键范围的下限开始向上移动。"