Javascript IndexedDb:使用多个键搜索一系列值

Javascript IndexedDb: searching a range of value using multiple keys

本文关键字:搜索 一系列 IndexedDb Javascript      更新时间:2023-09-26

是否可以在多个键上使用"绑定"键范围搜索索引 Db 对象存储。使用以下数据:

  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:使用多个索引搜索indexeddb

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

索引数据库查询支持仅改变最后一个键。例如,以下查询将起作用。

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

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

多个属性上的索引数据库游标范围

也就是说,您正在尝试执行由多个维度限制的查询。索引数据库查询(当前)仅限于范围,范围是一维的。因此,范围开始 [s1

, s2] = [0, 0, 0] 到结束 [e1, e2] = [2, 2] 包括值 [v1, v2] = [1, 3],因为 s1 <= v1 <= e1,因此不考虑 v2。该

文章中有一个链接到的解决方案。