IndexedDB根据同一store中两个字段的关系查询记录

IndexedDB query records based on the relationship between two fields in the same store

我有以下 SQL:

SELECT * FROM task WHERE finishDate > dueDate;

有没有办法查询IndexedDB存储来实现上面的功能?

我在 finishDatedueDate 上都有一个索引。

您将无法将这些索引用于此查询 - 因为您要搜索的值是在比较同一对象的两个属性时计算得出的。

因此,如果您想在不更改任何数据库的情况下执行此操作,则必须遍历所有对象并找到所需的值 - 此处示例:

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并在此字段上添加索引 - 然后您就可以在这个新创建的索引上查询记录。