对于我的数据库,我在time
上创建了一个名为created_at
的索引:
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);
所以在控制台的最后,数据看起来像这样:
我的问题是如何获取在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();
}
}
它没有按时创建排序!这是随机的!谢谢
答案 0 :(得分:2)
您可以通过为openCursor函数提供第二个参数来对升序/降序进行排序:index.openCursor(undefined,“next”);或“prev”下降。
排序应该适用于索引,当您不提供next或prev(next是默认值)时也是如此。当您在索引上调用openCursor时,它会以与chrome-dev-tools在调试器中单击“time”索引时显示它们相同的方式循环它们。
你是否有机会使用垫片(可能是iOS / android)? (https://github.com/axemclion/IndexedDBShim),因为这是一个已知的问题,排序在那里并没有真正起作用。如果您不确定那么我猜这段不适用于您..
编辑你可能没有使用垫片,因为我看到chrome dev-tools的indexedDb截图,你在使用垫片时无法做到,因为它使用不同的存储机制)