indexeddb非字母顺序获取最后添加的记录

时间:2016-07-31 08:42:59

标签: indexeddb

如果我在indexeddb中的数据格式为{name:' example1'},并且带有keypath - name并且所有内容都按字母顺序排序,那么如何才能按字母顺序获取最后添加的记录?

这是我的数据库初始

 var openRequest = indexedDB.open("database",1);
openRequest.onupgradeneeded = function(e) {
    var thisDB = e.target.result;

    if(!thisDB.objectStoreNames.contains("add")) {
        var store = thisDB.createObjectStore("add",{keyPath: 'name'});
    }
    if(!thisDB.objectStoreNames.contains("del")) {
        var store = thisDB.createObjectStore("del",{keyPath: 'name'});
    }

}

openRequest.onsuccess = function(e) {
    console.log("running onsuccess");
    db = e.target.result;
    var transaction = db.transaction(["add"],"readonly");
    var store = transaction.objectStore("add");
...

这是获取最后一项(这是错误的 - 它需要以' z'字母开头的最后记录):

            var openRequest = indexedDB.open('database');
            var type = true;

            openRequest.onsuccess = function(e) {
                db = e.target.result;
                if(type) {
                    var transaction = db.transaction(msg.type,"readwrite");
                    var store = transaction.objectStore(msg.type);
                    var cursorRequest = store.openCursor(null,"prev");
                    cursorRequest.onsuccess = function(e) {
                      var result = e.target.result;
                      if(result) {
                        var key_t = result.key;
                        var del_request = result.delete();
                        del_request.onsuccess = function() {
                          console.log('Deleted '+key_t);
                        };
                      } 
                    }
                }
            }    

谢谢!

1 个答案:

答案 0 :(得分:2)

我可以想到两种方式:

1)为每个对象存储一个创建日期的属性。在此属性上创建索引。然后用这个索引上的prev打开一个光标。

2)使用基本ID存储对象。在名称上创建索引。如果要加载按名称排序的对象,请使用名称索引。当你想加载最后插入的对象时,只需在对象存储本身上打开一个光标,它将使用自然顺序(插入顺序)。