【问题标题】:get distinct values for not unique index indexedDb获取非唯一索引 indexedDb 的不同值
【发布时间】:2016-02-29 11:35:12
【问题描述】:

在 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);
        }

但它很慢。它在整个 Store 上运行(至少看起来是这样 - 我使用 e.target.result.keyvalue 也可用。这让我想起了 IOT 行为,但不是索引......

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

我是 IndexedDb 的 rDBMS 新手。对不起,如果我说完全废话

【问题讨论】:

    标签: indexeddb


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多