IndexedDB:如何使用多个索引以及'multiEntry:true'

时间:2014-09-23 10:38:20

标签: javascript arrays indexing indexeddb

如果我在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'应该应用于查询数组字段,但如果我将它与多个索引一起使用它会显示错误。那么什么查询可以实现目标呢?感谢。

1 个答案:

答案 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;
  }));
};