IDBKeyRange
注意: 此功能在 Web Workers 中可用。
IDBKeyRange
接口是 IndexedDB API 的一部分,它表示用于键的一些数据类型上的连续间隔。记录可以从 IDBObjectStore
和 IDBIndex
对象中使用键或键范围检索。可以使用下限和上限来限制范围。例如,可以迭代键在值范围 A–Z 内的所有值。
键范围可以是单个值,也可以是带有上限和下限或端点的范围。如果键范围同时具有上限和下限,则它为有界;如果它没有边界,则它为无界。有界键范围可以是开区间(端点被排除在外)或闭区间(端点被包含在内)。要检索某个范围内的所有键,可以使用以下代码结构
范围 | 代码 |
---|---|
所有键 ≥ x | IDBKeyRange.lowerBound(x) |
所有键 > x | IDBKeyRange.lowerBound(x, true) |
所有键 ≤ y | IDBKeyRange.upperBound(y) |
所有键 < y | IDBKeyRange.upperBound(y, true) |
所有键 ≥ x && ≤ y | IDBKeyRange.bound(x, y) |
所有键 > x &&< y | IDBKeyRange.bound(x, y, true, true) |
所有键 > x && ≤ y | IDBKeyRange.bound(x, y, true, false) |
所有键 ≥ x &&< y | IDBKeyRange.bound(x, y, false, true) |
键 = z | IDBKeyRange.only(z) |
如果以下条件为真,则键在键范围内
- 键范围的下限值是以下之一
undefined
- 小于键值
- 如果
lowerOpen
为false
,则等于键值。
- 键范围的上限值是以下之一
undefined
- 大于键值
- 如果
upperOpen
为false
,则等于键值。
实例属性
IDBKeyRange.lower
只读-
键范围的下限。
IDBKeyRange.upper
只读-
键范围的上限。
IDBKeyRange.lowerOpen
只读-
如果下限值包含在键范围内,则返回 false。
IDBKeyRange.upperOpen
只读-
如果上限值包含在键范围内,则返回 false。
静态方法
IDBKeyRange.bound()
-
创建一个具有上限和下限的新键范围。
IDBKeyRange.only()
-
创建一个包含单个值的新键范围。
IDBKeyRange.lowerBound()
-
创建一个仅有下限的新键范围。
IDBKeyRange.upperBound()
-
创建一个新的上限键范围。
实例方法
IDBKeyRange.includes()
-
返回一个布尔值,指示指定键是否在键范围内。
示例
以下示例说明了如何使用键范围。在此,我们将 keyRangeValue
声明为介于 "A"
和 "F"
值之间的范围。打开一个事务(使用 IDBTransaction
)和一个对象存储,并使用 IDBObjectStore.openCursor
打开一个游标,将 keyRangeValue
声明为其可选键范围值。这意味着游标将仅检索键在该范围内的记录。此范围包含值 "A"
和 "F"
,因为我们没有声明它们应该是开区间。如果我们使用 IDBKeyRange.bound("A", "F", true, true);
,则该范围将不包含 "A"
和 "F"
,而只包含它们之间的值。
注意: 为了获得更完整的示例,以便您可以尝试使用键范围,请查看我们的 IDBKeyRange-示例 代码库(也可以查看示例的实时运行。)
function displayData() {
const keyRangeValue = IDBKeyRange.bound("A", "F");
const transaction = db.transaction(["fThings"], "readonly");
const objectStore = transaction.objectStore("fThings");
objectStore.openCursor(keyRangeValue).onsuccess = (event) => {
const cursor = event.target.result;
if (cursor) {
const listItem = document.createElement("li");
listItem.textContent = `${cursor.value.fThing}, ${cursor.value.fRating}`;
list.appendChild(listItem);
cursor.continue();
} else {
console.log("Entries all displayed.");
}
};
}
规范
规范 |
---|
Indexed Database API 3.0 # keyrange |
浏览器兼容性
BCD 表格仅在浏览器中加载
另请参阅
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 检索和更改您的数据:
IDBObjectStore
- 使用游标:
IDBCursor
- 参考示例:待办事项通知(查看示例的实时运行)。