对于数组键为的对象存储[a,b]
where a
也是一个索引,有没有更有效的方法来删除特定值的所有记录a
而不是在索引上打开游标a
并通过光标逐步删除每条记录?
有没有办法只为索引定义键范围,或者只为索引定义键范围a
然后离开b
打开任何值,以便可以删除该键范围的所有记录?
在这种特殊情况下,a
是一个不包括零的正整数,并且b
是一个包含零的正整数。从 [n,0] 到 [n+1,0] 的键范围是否保证返回相当于索引的所有键a=n
无论其价值如何b
?例如, IDBKeyRange.bound( [2,0], [3,0], false, true) 将返回索引的所有键a=2
?
上面的关键范围适用于我的测试用例,但我想知道如何处理这种情况b
不是整数,这使其成为一种特殊情况。
看来以下内容不起作用,因为它只会删除带有key
of 2
。对于一般情况有这样的方法吗?
i = transaction.objectStore( name ).index( 'a' );
i.delete( 2 );
谢谢。
当我了解更多并查看下面生成所需结果的代码时,我不再确定它为什么起作用。关键是复合[ topic, note ]
and 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
.
我想几个月前当我编写游标代码时我一定已经理解了这一点,但现在我在尝试在不打开游标的情况下删除特定索引值的一组记录时感到困惑。