【发布时间】:2023-04-03 06:40:01
【问题描述】:
对于数组键为[a,b] 的对象存储,其中a 也是索引,有没有比在索引@ 上打开游标更有效的方法来删除a 特定值的所有记录987654324@ 并通过光标逐步删除每条记录?
有没有办法只为索引定义键范围,或者只在a 上定义b 对任何值开放,这样可以删除该键范围的所有记录?
在这种特殊情况下,a 是不包括零的正整数,b 是包括零的正整数。无论b 的值如何,是否可以保证从 [n,0] 到 [n+1,0] 的键范围返回与索引 a=n 等效的所有键?例如,IDBKeyRange.bound( [2,0], [3,0], false, true) 将返回索引 a=2?的所有键?
上面的键范围适用于我的测试用例,但我想知道如果b 不是整数时如何处理这种情况,使其成为一种特殊情况。
以下内容似乎不起作用,因为它只会删除具有key 或2 的记录。一般情况下有这样的方法吗?
i = transaction.objectStore( name ).index( 'a' );
i.delete( 2 );
谢谢。
当我了解更多并查看下面生成所需结果的代码时,我不再确定它为什么会起作用。键是复合 [ topic, note ] 和 k 仅设置为主题值。所以,n 中的任何键都不应该匹配 k,不是吗?
我不明白为什么n.openCursor( k ) 返回任何要处理的记录,因为没有一个简单的密钥。 k是作为记录的键还是索引值?
T = DB_open.base.transaction( ['notes'], 'readwrite' ),
o = T.objectStore( 'notes' ),
k = IDBKeyRange.only( topic_value );
n = T.objectStore( 'notes' ).index( 'topic' );
n.openCursor( k ).onsuccess = ( e ) => { /* stepped through cursor */ };
看来我没有理解的是索引的key参数不是实际记录的键而是索引的键,这里是主题值。对于读取操作和游标,效果很好;但是索引上没有删除方法,例如 deleteAll 等价于 getAll。
我想我几个月前在编写游标代码时一定已经理解了这一点,但现在在不打开游标的情况下尝试删除特定索引值的一组记录时让自己感到困惑。
【问题讨论】:
标签: javascript indexeddb