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