通过方向查询具有多个字段的索引,其中指定了一个字段

时间:2015-01-18 16:43:11

标签: indexeddb

我的问题类似于this问题,但我想在具有多个字段的索引上执行此操作,其中一个字段具有特定值。

因此,例如,我有一个名为ExerciseSets的商店。 ExerciseSets有一个由两个字段组成的索引:exerciseId和completedDate。我想查询最近一行(由performDate确定),其中exerciseId为1.

1 个答案:

答案 0 :(得分:1)

答案非常相似,您需要创建一个compound index,然后以相反的顺序从该索引中检索数据。在这个例子中,我使用时间戳存储日期。

首先,您需要在onupgradeneeded事件期间创建复合索引:

store.createIndex('nametimestamp', ['text', 'timeStamp']);
//text and timestamp are my field names

然后将其用于搜索功能:

searchIndexedDB = function (value, callback) {
  var request = indexedDB.open(dbName);
  request.onsuccess = function(e) {
    var db = e.target.result;
    var trans = db.transaction(objectStoreName, 'readonly');
    var store = trans.objectStore(objectStoreName);
    var index = store.index('nametimestamp');
    var keyRange = IDBKeyRange.bound([value,0], [value, new Date().getTime()]);
    //open the index for all dates and for only one value
    var openCursorRequest = index.openCursor(keyRange, 'prev');
    //open the database sorted by time stamp - descending 

    openCursorRequest.onsuccess = function(e) {
        if(e.target.result)
            callback(e.target.result.value);
    };

    trans.oncomplete = function(e) {
        db.close();
    };

    openCursorRequest.onerror = function(e) {
        console.log("Error Getting: ", e);
    };
  };
  request.onerror = myStorage.indexedDB.onerror;
}