IndexedDB根据同一存储区中两个字段之间的关系查询记录

9jyewag0  于 2022-12-16  发布在  IndexedDB
关注(0)|答案(1)|浏览(237)

我有以下SQL:

SELECT * FROM task WHERE finishDate > dueDate;

有没有办法查询IndexedDB存储来实现上面的函数?
我在finishDatedueDate上都有一个索引。

zpgglvta

zpgglvta1#

您将无法在此查询中使用这些索引-因为您要搜索的值是在比较同一对象的两个属性时计算的。
因此,如果您想在不更改任何数据库的情况下执行此操作,则必须迭代所有对象并找到所需的值-例如:

function findItemsWithPastDueDate(callback){
    const initOpenReq = indexedDB.open(baseName);
    initOpenReq.onsuccess = function() {
        const db = initOpenReq.result;
        const transaction = db.transaction(objectStoreName, 'readonly');
        const objectStore = transaction.objectStore(objectStoreName);
        const cursorRequest = objectStore.openCursor();
        let aggregate = [];
        cursorRequest.onsuccess = function (event){
            if (event.target.result){
                const val = event.target.result.value;
                if(val.finishDate > && val.dueDate){ 
                    aggregate.push(val);
                }
                event.target.result.continue();
            }
        };

        transaction.oncomplete = function (event) {
                callback(aggregate); // return items
        };
    }
}
  • 替代解决方案:* 如果这是您希望快速执行的查询,那么我建议您向所有记录finishDatePastDueDate添加一个计算字段,并在此字段上添加索引-然后您将能够在此新创建的索引上查询记录。

相关问题