В настоящее время у меня есть 2 функции. Один для запроса БД для результатов с определенной парой ключ/значение и один для строк getAll, отсортированных по определенному ключу. Есть ли способ объединить эти два? Поэтому я хочу иметь функцию, в которой вы ищете хранилище для объектов, где a = 1 отсортировано по b asc.IndexedDB поиск ключа и сортировки
Функция, чтобы получить результаты по индексу:
getByIndex : function(store,indexKey,indexValue,callback){
var results = [];
this._initTransaction(store,"readonly",function(err,transaction){
var index = transaction.objectStore(store).index(indexKey);
index.openCursor(IDBKeyRange.only(indexValue)).onsuccess = function(event) {
var cursor = event.target.result;
if (cursor) {
results.push(cursor.value);
cursor.continue();
} else {
callback(true,results);
}
};
})
}
Функция, чтобы получить результаты отсортированы по ключу:
getSorted : function(store,sortKey,callback){
var results = [];
this._initTransaction(store,"readonly",function(err,transaction){
var index = transaction.objectStore(store).index(sortKey);
index.openCursor(null,'next').onsuccess = function(event) {
var cursor = event.target.result;
if (cursor) {
results.push(cursor.value);
cursor.continue();
} else {
callback(true,results);
}
};
})
},
Спасибо за вашу помощь!
Чтобы сделать, где «a = 1 отсортировано по b asc», вам нужен индекс на '['a', 'b']', тогда вы можете открыть курсор на 'IDBKeyRange.bound ([1], [2 ], false, true). Если вы инвертируете индекс (как у вас есть), вы увидите значения с помощью! = 1. Хотите взять удар при обновлении своего ответа? –
Спасибо, Джош, я думаю, я исправил это. У вас еще достаточно очков, чтобы отредактировать ответ? Вы можете, если хотите. – Josh
Все еще не совсем верно: IDBKeyRange.bound ([a], [a]) - это диапазон ключей, содержащий только один возможный ключ - это не префиксный матч. Я буду бросать в +1 –