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

时间:2018-08-31 08:06:47

标签: 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);

1 个答案:

答案 0 :(得分:2)

键顺序在这里定义:

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