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

g2ieeal7  于 2023-11-15  发布在  IndexedDB
关注(0)|答案(1)|浏览(247)

我的问题类似于this问题,除了我想对具有多个字段的索引执行此操作,其中一个字段具有特定值。
因此,例如,我有一个名为ExcluciseSets的存储。ExcluciseSets有一个由两个字段组成的索引,exerciseId和performedDate。我想查询exerciseId为1的最近一行(由performedDate确定)。

6qqygrtg

6qqygrtg1#

答案非常相似,你需要创建一个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;
    }

相关问题