Javascript 安全地假设索引中的顺序与存储中的顺序相同,并且键的上半部分相同吗?

Javascript 安全地假设索引中的顺序与存储中的顺序相同,并且键的上半部分相同吗?,javascript,indexeddb,Javascript,Indexeddb,所以我在indexeddb中有一个存储,它有一个组合键路径:[someKey,someSubKey]。我在someKey上有一个索引。我正在寻找删除给定someKey的所有对象的最快方法。我尝试使用的方法是在索引中获取上下两个子键,然后在存储区中删除上下两个子键之间的键范围 至少在Firefox和Chrome中是这样。但它假定索引中的值顺序与存储中的值顺序相同。我想知道这是否是一个安全的假设?我认为可能是这样,因为存储和索引的键路径共享第一个键,但是找不到关于排序顺序的很多文档。我不想逐个删除每

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

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

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

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);

此处定义了键顺序:

特别是对于您的情况,对于数组键,它们是按成员顺序排列的。i、 e.如果
A
B
,则
[A,…]
[B,…]


是的,如果要删除范围
IDBKeyRange.bound([A],[B],false,true)
,它将删除带有
[A,…]
的任何内容。(这假设A和B之间没有值。遗憾的是,API中没有前缀范围。)

这里定义了键顺序:

特别是对于您的情况,对于数组键,它们是按成员顺序排列的。i、 e.如果
A
B
,则
[A,…]
[B,…]


是的,如果要删除范围
IDBKeyRange.bound([A],[B],false,true)
,它将删除带有
[A,…]
的任何内容。(这假设A和B之间没有值。遗憾的是,API中没有前缀范围。)

上次我检查时,您不能删除一系列键,一次只能删除一个键。此外,还有IDBDINDEX.prototype.delete,无需使用IDBDObjectStore.prototype.delete上次我检查了不能删除一系列键,一次只能删除一个键。此外,还有IDBDINDEX.prototype.delete,无需使用IDBDObjectStore.prototype.delete