Фильтрация IndexedDB начинается с предложения WHERE с Dexie - PullRequest
0 голосов
/ 01 декабря 2018

Dexie 2.0.4

JSFiddle: https://jsfiddle.net/n3xsokay/

Я пытаюсь выяснить, как фильтровать таблицу IndexedDB по нескольким значениям, используя DexieJS.Хотя указанная выше скрипка не совсем то, что мне нужно, она близка.У меня есть таблица с четырьмя столбцами:

  • Имя
  • Возраст
  • Рост
  • Размер обуви

Я установилсоставьте таблицу с индексами следующим образом:

db.version(1).stores({
    friends: '++id,name, age, height'
});

Я заполняю таблицу (в настоящее время) 1000 значений случайного числа для тестирования.Мне нужно иметь возможность строить динамические запросы на основе нескольких значений.Например:

  • возраст> 90, рост> 7
  • рост = 7, возраст = 50, имя начинается с 'Foo-1'
  • имя начинается с'Foo-3', возраст <50 </li>
  • и т. Д.

В скрипте я использую предложение WHERE, чтобы выполнить первую часть любого фильтра, а затем фильтровать полученную коллекцию.используя функцию фильтра.

var coll = db.friends.where('age').above(90).filter(function (friend) {
    return friend.height > 5 && friend.shoeSize === 12;
});
log('have coll');
return coll.toArray();

Это работает, но это путь слишком медленно.Я пробовал с различными комбинациями фильтров, и это, кажется, не имеет значения

В конечном счете, это будет использоваться для возможности автозаполнения / ввода заголовка с> 10000 записей, что занимает 15-20 секундза запрос.Реализация этого с функцией фильтра только для 1000 записей занимает несколько секунд.Получение начального набора происходит довольно быстро (скрипта выходит из режима «есть колл», когда получает коллекцию, и она почти мгновенная), но затем применение функции фильтра занимает слишком много времени.

Я смотрел на соединениеиндексы, и они выглядят так, как будто они будут работать для всего, кроме фильтрации «старты с».

Можно ли как-то включить фильтр типа старт-с в предложении WHERE?

Спасибо,

TTE

...