我有以下SQL:
SELECT * FROM task WHERE finishDate > dueDate;
有没有办法查询IndexedDB存储来实现上面的函数?我在finishDate和dueDate上都有一个索引。
finishDate
dueDate
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
1条答案
按热度按时间zpgglvta1#
您将无法在此查询中使用这些索引-因为您要搜索的值是在比较同一对象的两个属性时计算的。
因此,如果您想在不更改任何数据库的情况下执行此操作,则必须迭代所有对象并找到所需的值-例如:
finishDatePastDueDate
添加一个计算字段,并在此字段上添加索引-然后您将能够在此新创建的索引上查询记录。