IDBKeyRange 对象

IDBKeyRange 对象代表数据仓库(object store)里面的一组主键。根据这组主键,可以获取数据仓库或索引里面的一组记录。

IDBKeyRange 可以只包含一个值,也可以指定上限和下限。它有四个静态方法,用来指定主键的范围。

  • IDBKeyRange.lowerBound():指定下限。
  • IDBKeyRange.upperBound():指定上限。
  • IDBKeyRange.bound():同时指定上下限。
  • IDBKeyRange.only():指定只包含一个值。

下面是一些代码实例。

  1. // All keys ≤ x
  2. var r1 = IDBKeyRange.upperBound(x);
  3. // All keys < x
  4. var r2 = IDBKeyRange.upperBound(x, true);
  5. // All keys ≥ y
  6. var r3 = IDBKeyRange.lowerBound(y);
  7. // All keys > y
  8. var r4 = IDBKeyRange.lowerBound(y, true);
  9. // All keys ≥ x && ≤ y
  10. var r5 = IDBKeyRange.bound(x, y);
  11. // All keys > x &&< y
  12. var r6 = IDBKeyRange.bound(x, y, true, true);
  13. // All keys > x && ≤ y
  14. var r7 = IDBKeyRange.bound(x, y, true, false);
  15. // All keys ≥ x &&< y
  16. var r8 = IDBKeyRange.bound(x, y, false, true);
  17. // The key = z
  18. var r9 = IDBKeyRange.only(z);

IDBKeyRange.lowerBound()IDBKeyRange.upperBound()IDBKeyRange.bound()这三个方法默认包括端点值,可以传入一个布尔值,修改这个属性。

与之对应,IDBKeyRange 对象有四个只读属性。

  • IDBKeyRange.lower:返回下限
  • IDBKeyRange.lowerOpen:布尔值,表示下限是否为开区间(即下限是否排除在范围之外)
  • IDBKeyRange.upper:返回上限
  • IDBKeyRange.upperOpen:布尔值,表示上限是否为开区间(即上限是否排除在范围之外)

IDBKeyRange 实例对象生成以后,将它作为参数输入 IDBObjectStore 或 IDBIndex 对象的openCursor()方法,就可以在所设定的范围内读取数据。

  1. var t = db.transaction(['people'], 'readonly');
  2. var store = t.objectStore('people');
  3. var index = store.index('name');
  4. var range = IDBKeyRange.bound('B', 'D');
  5. index.openCursor(range).onsuccess = function (e) {
  6. var cursor = e.target.result;
  7. if (cursor) {
  8. console.log(cursor.key + ':');
  9. for (var field in cursor.value) {
  10. console.log(cursor.value[field]);
  11. }
  12. cursor.continue();
  13. }
  14. }

IDBKeyRange 有一个实例方法includes(key),返回一个布尔值,表示某个主键是否包含在当前这个主键组之内。

  1. var keyRangeValue = IDBKeyRange.bound('A', 'K', false, false);
  2. keyRangeValue.includes('F') // true
  3. keyRangeValue.includes('W') // false