javascript - 可以安全地假设索引中的顺序与键的上部相同的存储相同吗?

标签 javascript indexeddb

所以我在indexeddb 中有一个存储,其中包含一个组合的keyPath:[someKey, someSubKey]。我在 someKey 上有一个索引。我正在寻找删除给定 someKey 的所有对象的最快方法。我尝试采用的方法是获取索引上的下子键和上子键,然后使用下子键和上子键之间的键范围在存储上删除。

这有效,至少在 Firefox 和 Chrome 中是这样。但它假设索引中的值顺序与存储中的值顺序相同。我想知道这是否是一个安全的假设?我认为可能是这样,因为存储和索引的关键路径共享第一个键,但找不到太多有关排序顺序的文档。我不想单独删除每条记录,因为可能有数千条记录。

下面的伪代码描述了该方法:

const someKeyRange = IDBKeyRange.only(givenSomeKey);
const lowerSubKey = index.openKeyCursor(someKeyRange, "next")
  .primaryKey[1];
const upperSubKey = index.openKeyCursor(someKeyRange, "prev")
  .primaryKey[1]; //1 to get subKey
const storeRange = IDBKeyRange.bound(
  [givenSomeKey, lowerSubKey],
  [givenSomeKey, upperSubKey]
);
store.delete(storeRange);

最佳答案

key 排序在这里定义:

https://w3c.github.io/IndexedDB/#key-construct

特别针对您的情况,使用数组键,它们是按成员排序的。即如果 A <B,则 [A, ...] <[B, ...] .

是的,如果您要删除范围 IDBKeyRange.bound([A], [B], false, true) ,则会删除 [A, ... ]。 (这假设 A 和 B 之间没有值。遗憾的是,API 中没有前缀范围。 https://github.com/w3c/IndexedDB/issues/47 )

关于javascript - 可以安全地假设索引中的顺序与键的上部相同的存储相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52111115/

相关文章:

javascript - D3 动画导致 Chrome 上的 CPU 使用率过高/崩溃

javascript - 在哪里放置用于创建 Cordova 插件的 Javascript?

javascript - SCRIPT5045 : Assignment to read-only properties is not allowed in strict mode

javascript - 如何查找 indexedDB 对象和事件的属性?

cordova - 没有 WebSQL 的跨平台移动开发的 future

javascript - 无法创建第二个 objectStore IndexedDB

javascript - 循环显示下一项

Grails 中的 Javascript 表格单击功能

windows - IndexedDB 查看所有数据库和对象存储

javascript - 与lovefield连接 promise 的异常(exception)情况