IndexedDB:检索具有最大值的项目

时间:2014-02-20 13:56:25

标签: javascript indexeddb

假设我有一个名为IndexedDB的{​​{1}}集合。所有项目都有字段:

  • ID
  • 名称
  • 修改

items字段是一个数字字段。我需要检索具有最大修订值的项目(或者至少只检索最大修订版本值)。最好的方法是什么?

1 个答案:

答案 0 :(得分:15)

您需要做的第一件事是在revision字段上创建索引。

然后你需要一个搜索函数,它将使用该索引并以对象的逆序打开索引。然后第一个对象将是您要查找的对象。

var index = objectStore.index('revision');
index.openCursor(null, 'prev'); 

null表示您搜索的所有值都不是特定的值,第二个参数是搜索的方向。

以下是示例代码:

function getMaxNumber (callback) {
    var openReq = indexedDB.open(baseName);
    openReq.onsuccess = function() {
        var db = openReq.result;
        var transaction = db.transaction(objectStoreName, 'readonly');
        var objectStore = transaction.objectStore(objectStoreName);
        var index = objectStore.index('revision');
        var openCursorRequest = index.openCursor(null, 'prev');
        var maxRevisionObject = null;

        openCursorRequest.onsuccess = function (event) {
            if (event.target.result) {
                maxRevisionObject = event.target.result.value; //the object with max revision
            }
        };
        transaction.oncomplete = function (event) {
            db.close();
            if(callback) //you'll need a calback function to return to your code
                callback(maxRevisionObject);
        };
    }
}

由于IndexedDB api是异步的,你需要一个回调函数来将值返回给你的代码。