我的每个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
答案 0 :(得分:1)
通过将createIndex的keyPath参数定义为数组,可以一次在两个属性上创建索引。使用您要排序的属性作为数组中的第一项。例如,请参阅我的其他帖子,例如:In IndexedDB, is there a way to make a sorted compound query?