2016-05-18 1 views
1

У меня макете IndexedDB держит предметы, как:Почему я не могу получить правильный результат через функцию IDBKeyRange.bound в IndexedDB?

{ 
id:1002, 
name:"Frank", 
company: "dg", 
age:30 
} 

И я создал индекс [ «имя», «возраст», «Компания»], просто хочу, чтобы получить результат Мне нужно, как websql.

getMultipleDataByRangeфункция определяется, чтобы получить детали, я поставил ['0',24,'ef'] в lowerBound и ['z',24,'ef'], как upperBound, я думал, что он должен показать мне результат соответствует пунктов Кто в 24 лет плюс, чья компания «эф». Но результат показывает, что все элементы соответствуют диапазону, который я установил. Как настроить диапазон для получения правильного результата.

кода также можно проверить с помощью JSBIN ссылки я сгенерировал:

http://jsbin.com/sinuxa/edit?js,console

ответ

3

Это будет работать, если вы измените порядок указательного таким образом, чтобы та часть, которая изменяется (имя) в конце. Если вы хотите знать, почему, см. In IndexedDB, is there a way to make a sorted compound query? для объяснения того, как составные индексы работают в IndexedDB.

+0

Спасибо, я вижу вопросы и ответы, которые вы упомянули ранее. Я просто задавался вопросом, есть ли способ получить окончательный результат без изменения порядка моего индекса, чтобы избежать создания более разных упорядоченных индексов для соответствия различным условиям. – Jin

+0

Более того, я также проверяю «N-мерный путь» по этой ссылке (https://gist.github.com/inexorabletash/704e9688f99ac12dd336), но я думаю, что это не сработает, если строки будут перемешаны, потому что трудно задайте диапазон строк. Кроме того, я проверил некоторые уродливые способы сохранить результат для каждого условия в разных массивах, а затем получить пересечение. Это не изящно и неэффективно, когда db становится больше. – Jin

+0

Этот gist (я автор) должен работать на ваш случай. Согласился, что установка диапазонов строк является тонкой. Для «любой строки» вы можете использовать '' to [] (сначала пустая строка, массив больше любой строки). Для строковых префиксов вы можете использовать, например, 'a' to 'a \ uFFFF' для любой строки, начинающейся с (если \ uFFFF действителен, тогда вам нужно использовать трюк-преемник из https://gist.github.com/inexorabletash/5462871) –

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