【问题标题】:Javascript IndexedDb: searching a range of value using multiple keysJavascript IndexedDb:使用多个键搜索值范围
【发布时间】:2016-01-27 14:46:35
【问题描述】:

是否可以在多个键上使用“绑定”keyRange 搜索 indexedDb 对象存储。使用以下数据:

  let simpleA = {
    id: 'A',
    bottomX: 2.5,
    bottomY: 5.5,
    topX: 3.5,
    topY: 6.5
  };

  let simpleB = {
    id: 'B',
    bottomX: 4.2,
    bottomY: 4.2,
    topX: 4.8,
    topY: 4.8
  };

  let simpleC = {
    id: 'C',
    bottomX: 8.5,
    bottomY: 6.5,
    topX: 9.5,
    topY: 7.5
  };

我尝试在多个键上创建索引:

simpleStore.createIndex('bottomX bottomY topX topY', ['bottomX', 'bottomY', 'topX', 'topY']);

还有一个像这样的键范围:

let keyRange = IDBKeyRange.bound(
      [0,5,0,0],
      [10,6,10,10]
);

然后创建一个游标:

let mycursor = index.openCursor(keyRange);

我希望这会给我一个simpleAsimpleB 但不是simpleC 的结果,因为bottomY 属性不在范围内。然而,当我测试这段代码时,我意识到只有索引的第一个键是使用bound 键范围的测试。

还有其他方法可以在多个键上实现这种范围搜索吗?

对于信息,我从这篇文章中得到了多重索引的灵感: Javascript: Searching indexeddb using multiple indexes

【问题讨论】:

    标签: javascript indexeddb


    【解决方案1】:

    您必须手动组合所有四个单独的键范围查询。

    IndexedDB 查询仅支持改变最后一个键。例如,以下查询将起作用。

    let keyRange = IDBKeyRange.bound(
          [0,5,10,0],
          [0,5,10,10]
    );
    

    【讨论】:

      【解决方案2】:

      我相信你问的问题相当于:

      Indexed DB cursor ranges on mulitiple properties

      也就是说,您正在尝试执行受多个维度限制的查询。索引数据库查询(当前)仅限于范围,并且范围是一维的。所以范围 start [s1, s2] = [0, 0, 0] 到 end [e1, e2] = [2, 2] 包括值 [v1, v2] = [1, 3] 因为 s1

      从那篇文章链接到一个解决方案。

      【讨论】:

        猜你喜欢
        • 2013-05-06
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-12
        • 1970-01-01
        • 1970-01-01
        • 2023-02-03
        相关资源
        最近更新 更多