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

get distinct values for not unique index indexedDb

在 rDBMS 中,您可以 select DISTINCT value 在关系的索引列上。它应该 仅扫描 INDEX 以减少 I/O 和时间。

问题:我如何在 indexedDb 中做同样的事情?

Research:我知道 mongodb 做到了,但我找不到 indexedDb 的任何信息。我预计 getAllKeys 会有所帮助,但它只为我列出了 PK 值。我的情况?想象一家拥有一百万行的商店。一栏是欧盟国家,它被编入索引。每个国家的分布情况都非常不同。我想获取一个国家/地区的行(一个国家/地区可以没有行,而其他国家/地区可以有很多行)。我让用户能够按国家/地区执行搜索。但他有很多 "empty" 按钮 - 没有行的国家代码。相反,我想给他商店中存在的县代码。所以我这样做:

        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 人员。对不起,如果我胡说八道

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

或者,您也可以尝试将方向参数传递给IDBIndex.prototype.openCursor,例如"nextunique"。在这种情况下,"The cursor shows all records, excluding duplicates. If multiple records exist with the same key, only the first one iterated is retrieved. It starts at the lower bound of the key range and moves upwards."