我有以下SQL:
SELECT * FROM task WHERE finishDate > dueDate;
是否有一种方法来查询IndexedDB存储实现上述功能?
我有finishDate
和dueDate
的索引。
您将无法在此查询中使用这些索引-因为您正在搜索的值是在比较同一对象的两个属性时计算的。
所以如果你想在不改变数据库的情况下做到这一点,你必须遍历所有对象并找到所需的值-例如:
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
,并在此字段上添加索引-然后你就可以查询这个新创建的索引上的记录。