indexeddb从对象存储中获取所有键

z18hc3ub  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(3)|浏览(315)

我是indexeddb的新手,假设我将几个对象放到indexeddb中:

transaction.objectStore("some_store").put(some_object, some_key);

现在我想从那个对象存储中获取所有的键。这可能吗?如果可以,怎么做?

gv8xihay

gv8xihay1#

正如Kristof所说,使用openCursor方法是可能的。它效率不高,因为请求游标对象的值 * 可能 * 涉及反序列化。
你还应该注意到,你的put方法返回插入对象的主键。
目前,如果你想要非常有效的密钥检索,索引keyPath用于内联密钥对象存储。对于非内联对象存储,你就不太走运了。使用索引,你可以如下检索密钥:

transaction.objectStore("some_store").index('id').openKeyCursor(); // here id is primary key path

有一个bug report用于直接请求openKeyCursor方法的对象存储。希望下一个IndexedDB规范会有它。

z5btuh9x

z5btuh9x2#

有一个**IDBObjectStore.getAllKeys()方法,它将返回对象存储中的所有键。
有关此方法的详细信息,请参阅:https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/getAllKeys
您可以将此方法与
IDBObjectStore.getAll()**方法一起使用来合并结果。
缺点是在执行这些方法之间不应向存储区添加任何数据。

gajydyqb

gajydyqb3#

您需要使用openCursor方法逐个检索所有记录。仅获取键是不可能的。

相关问题