获取非唯一索引indexedDb的不同值

时间:2016-02-29 11:35:13

标签: indexeddb

在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.keyvalue也可用。这让我想起了IOT行为,但不是索引......

无论如何,谁知道只是告诉我 - 我可以使用索引想要的方式吗?..

我是一个对IndexedDb不熟悉的rDBMS人。对不起,如果我说完全不存在

1 个答案:

答案 0 :(得分:1)

也许使用IDBCursor.prototype.continue的参数可以帮助你做你想做的事情?您可以传入要查找的下一个键作为附加参数。

或者,您也可以尝试将方向参数传递给IDBIndex.prototype.openCursor,例如" nextunique"。在这种情况下,"光标显示所有记录,不包括重复记录。如果存在具有相同键的多个记录,则仅检索迭代的第一个记录。它从键范围的下限开始向上移动。"