2013-03-10 2 views
2

Я новичок в IndexedDb, я использую его в приложении Windows 8. Я пытаюсь сортировать результаты запроса более чем одним индексом. Другими словами, у меня есть хранилище объектов с объектами, все из которых имеют свойства даты и фамилии. Я хочу сортировать сначала по дате, потом по фамилии. Есть ли способ сделать это с помощью IndexedDB? Или мне придется сортировать результаты запроса с помощью JavaScript?indexeddb сортировать по нескольким индексам

ответ

8

В IndexedDB, композитный индекс (array keyPath) используется для такого множественного сортировки следующим образом:

objectStore.createIndex('date, last', ['date', 'last']); 

К сожалению, IE10 не поддерживает композитный индекс.

2

Поскольку IE10 не поддерживает массивные ключевые пути для индексов, вам придется самому делать фильтр. Если вы хотите свернуть его вручную, я бы сосредоточился на создании индекса на том, что будет вашим самым большим ключом (таким как тот, который будет иметь самые разные значения), и IDB сделает запрос против этого, а затем напишет свой собственный фильтр против остальные предметы внутри метода onsuccess вашего курсора.

В качестве альтернативы вы можете посмотреть стороннюю оболочку IDB, чтобы сделать это, db.js имеет свободный API запросов, который позволяет комбинировать индексные запросы с пользовательской фильтрацией обратного вызова (see here).

1

Как вы видите в других ответах, IE 10 (и поэтому приложения для Windows 8) не поддерживает массив KeyPaths. Это означает, что вы можете использовать только один индекс для сортировки данных с помощью API напрямую.

Вы можете попробовать мою библиотеку linq2indexeddb, она предоставляет LINQ как интерфейс для запроса данных. Он также поддерживает несколько типов. Для него также есть окна 8 nuget package.

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