如果我在indexedDB中获取这些数据:
{
name:"Ray",
age:20,
tags:["apple","banana","beer"]
}
{
name:"Scott",
age:25,
tags:["beer"]
}
{
name:"Marc",
age:28,
tags:["mongo","jenkins"]
}
然后我想找到那些标有'啤酒'并按年龄排序结果的人,我该怎么办?
根据这篇文章http://www.raymondcamden.com/2012/8/10/Searching-for-array-elements-in-IndexedDB,'multiEntry:true'应该应用于查询数组字段,但如果我将它与多个索引一起使用它会显示错误。那么什么查询可以实现目标呢?感谢。
答案 0 :(得分:2)
在onugpradeneeded回调函数中:
store.createIndex('tagsIndex','tags',{multiEntry:true});
在您的查询部分中,执行
var tx = db.transaction('store');
var tagsIndex = tx.objectStore('store').index('tagsIndex');
var beerQuery = tagsIndex.openCursor(IDBKeyRange.only('beer'));
var people = [];
beerQuery.onsuccess = function(event) {
var cursor = this.result;
if(!cursor) return;
people.push(cursor.value);
cursor.continue();
};
tx.oncomplete = function() {
onGetPeopleWhoLikeBeerSortedByAgeAsc(people.sort(function(p1, p2) {
if(p1.age > p2.age) return -1;
if(p1.age == p2.age) return 0;
return 1;
}));
};