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

indexeddb get all keys from object store

本文关键字:获取 对象 存储 Indexeddb      更新时间:2023-09-26

我是indexeddb新手。假设我把几个对象索引为db:

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

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

正如Kristof所说,使用openCursor方法是可能的。它效率不高,因为请求值游标对象可能会涉及反序列化。

您还应该注意,您的put方法返回插入对象的主键。

目前,如果您想要非常有效的键检索,请为内联键对象存储索引keyPath。对于离线对象存储,您就不那么幸运了。使用索引,您可以按照如下方式检索键:

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

有一个直接请求对象存储的openKeyCursor方法的bug报告。希望下一个IndexedDB规范将有它。

有一个IDBObjectStore.getAllKeys()方法,它将返回对象存储中的所有键。

有关此方法的更多信息,请参阅:https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/getAllKeys

您可以将此方法与IDBObjectStore.getAll()方法一起使用,以组合结果。

缺点是在执行这些方法之间不应该向存储中添加数据。

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