2016-01-27 2 views
0

Можно ли искать хранилище объектов indexedDb с помощью «привязанного» ключа к нескольким клавишам. При следующих данных:Javascript 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); 

Я был надеясь, что это даст мне результат simpleA и simpleB, но не simpleC, так как свойство bottomY не находится в диапазоне. Однако, когда я тестировал этот код, я понял, что только первый ключ индекса - это тесты с ключом bound.

Есть ли другой способ достичь этого диапазона поиска по нескольким клавишам?

Для Infos, я получил вдохновение множественного индекса с этого поста: Javascript: Searching indexeddb using multiple indexes

ответ

0

Вы должны вручную объединить все четыре отдельных ключевых запросов по диапазону.

Поддержка запросов IndexedDB, изменяющая только последний ключ. Например, следующий запрос будет работать.

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

Я считаю, что вопрос вы задаете эквивалентно:

Indexed DB cursor ranges on mulitiple properties

Который должен сказать, что вы пытаетесь сделать запрос, ограниченный несколькими измерениями. Запросы индексированных БД (в настоящее время) ограничены диапазонами, а диапазоны - одномерными. Таким образом, начало диапазона [s1, s2] = [0, 0, 0] до конца [e1, e2] = [2, 2] включает значение [v1, v2] = [1, 3], поскольку s1 < = v1 < = e1, поэтому v2 не рассматривается.

Существует решение, связанное с этой статьей.

Смежные вопросы