如果我在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);
};
}
}
}
}
谢谢!
答案 0 :(得分:2)
我可以想到两种方式:
1)为每个对象存储一个创建日期的属性。在此属性上创建索引。然后用这个索引上的prev打开一个光标。
2)使用基本ID存储对象。在名称上创建索引。如果要加载按名称排序的对象,请使用名称索引。当你想加载最后插入的对象时,只需在对象存储本身上打开一个光标,它将使用自然顺序(插入顺序)。