2014-10-24 3 views
0

Для моего Databse я создал индекс с именем time на created_at:Неожиданное поведение сортировки по номеру/дате в IndexedDB

var os = thisDB.createObjectStore(name, { keyPath : "id" }); 
os.createIndex("time", "created_at", {unique: false }); 

Как вы можете видеть, я сохранить время как Unix целого:

entry['created_at'] = Date.new(entry['created_at']).unix(); 
var request = sto.add(entry); 

Так что в конце концов в консоли данные выглядят следующим образом:

enter image description here

Мой вопрос, как я могу получить все данные в asc или desc созданные в направлении:

Потому что, когда я иду через данные с помощью курсора:

function open_cursor(){ 
    var objectStore = ENTRYDB.transaction('entries').objectStore('entries').index('time'); 
    var request = objectStore.openCursor(); 
    request.onsuccess = function(event) {handle_open(event)}; 
} 
function handle_open(evt){ 
    var cursor = evt.target.result; 
    if (cursor) { 
    console.log(cursor.value); 
    cursor.continue(); 
    } 
} 

Его не отсортированный по созданным во время ! Это случайно! THANKS

+0

Это выглядит правильно для меня, поэтому я не могу помочь. Когда вы открываете курсор в индексе с использованием аргументов по умолчанию (неопределенный диапазон клавиш, «следующий»), результат должен быть перечислим в порядке возрастания ключа. – Josh

ответ

2

Вы можете отсортировать по возрастанию/убыванию в функции openCursor, указав второй параметр: index.openCursor (undefined, "next"); или "prev" для спуска.

Сортировка должна работать над индексом, также если вы не предоставляете следующую или предыдущую (следующая по умолчанию). Когда вы вызываете openCursor в индексе, он обходит их точно так же, как хром-dev-tools показывает их при нажатии индекса «time» в отладчике.

Вы используете прокладку случайно (возможно, для iOS/android)? (https://github.com/axemclion/IndexedDBShim), потому что это известная проблема сортировки на самом деле не работает. Если вы не уверены, то я предполагаю, что этот пункт не относится к вам ..

EDIT Вы problably не используя подкладку, потому что я вижу скриншот IndexedDB из хромированных DEV-инструментов, которым вы могли бы не выполняются при использовании прокладки, поскольку он использует другой механизм хранения).

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