使用多个索引从IndexedDB数据库中进行选择

时间:2014-03-10 16:52:41

标签: indexing multiple-columns indexeddb

我的每个IndexedDB对象都具有以下格式:

object:
{
     objectName: "someName"
     objectTest: "someTest"
     objectAge: "someAge"
}

然后我已经设置了以下索引:

storeObject.createIndex( "by_objectName", "objectName", { unique: false } );
storeObject.createIndex( "by_objectTest", "objectTest", { unique: false } );
storeObject.createIndex( "by_objectAge", "objectAge", { unique: false } );

首先,我想通过objectName循环遍历所有对象(这是可行的):

var openedIndex = storeObject.index("by_objectName");
var numItemsInIndex = openedIndex.count();
if (openedIndex) {
    var curCursor = openedIndex.openCursor();               
    curCursor.onsuccess = function(evt) {                   
        var cursor = evt.target.result; 
        if (cursor) {
                //do something
                cursor.continue();
        }
    }
}

因此上面的代码将获取所有对象,并按objectName排序。 如何将所有具有objectTest: "certainValue"的对象和按objectName排序的对象保持与上例中的相同。我需要在行if (openedIndex) {之前过滤结果列表,因为我需要在循环中稍后使用numItemsInIndex

换句话说,如果这是关系数据库,那么如何实现:

SELECT * FROM objects WHERE objectTest = "certainValue" SORT BY objectName

1 个答案:

答案 0 :(得分:1)

通过将createIndex的keyPath参数定义为数组,可以一次在两个属性上创建索引。使用您要排序的属性作为数组中的第一项。例如,请参阅我的其他帖子,例如:In IndexedDB, is there a way to make a sorted compound query?