我是indexeddb的新手,假设我将几个对象放到indexeddb中:
transaction.objectStore("some_store").put(some_object, some_key);
现在我想从那个对象存储中获取所有的键。这可能吗?如果可以,怎么做?
gv8xihay1#
正如Kristof所说,使用openCursor方法是可能的。它效率不高,因为请求游标对象的值 * 可能 * 涉及反序列化。你还应该注意到,你的put方法返回插入对象的主键。目前,如果你想要非常有效的密钥检索,索引keyPath用于内联密钥对象存储。对于非内联对象存储,你就不太走运了。使用索引,你可以如下检索密钥:
transaction.objectStore("some_store").index('id').openKeyCursor(); // here id is primary key path
有一个bug report用于直接请求openKeyCursor方法的对象存储。希望下一个IndexedDB规范会有它。
z5btuh9x2#
有一个**IDBObjectStore.getAllKeys()方法,它将返回对象存储中的所有键。有关此方法的详细信息,请参阅:https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/getAllKeys您可以将此方法与IDBObjectStore.getAll()**方法一起使用来合并结果。缺点是在执行这些方法之间不应向存储区添加任何数据。
gajydyqb3#
您需要使用openCursor方法逐个检索所有记录。仅获取键是不可能的。
3条答案
按热度按时间gv8xihay1#
正如Kristof所说,使用openCursor方法是可能的。它效率不高,因为请求游标对象的值 * 可能 * 涉及反序列化。
你还应该注意到,你的put方法返回插入对象的主键。
目前,如果你想要非常有效的密钥检索,索引keyPath用于内联密钥对象存储。对于非内联对象存储,你就不太走运了。使用索引,你可以如下检索密钥:
有一个bug report用于直接请求openKeyCursor方法的对象存储。希望下一个IndexedDB规范会有它。
z5btuh9x2#
有一个**IDBObjectStore.getAllKeys()方法,它将返回对象存储中的所有键。
有关此方法的详细信息,请参阅:https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/getAllKeys
您可以将此方法与IDBObjectStore.getAll()**方法一起使用来合并结果。
缺点是在执行这些方法之间不应向存储区添加任何数据。
gajydyqb3#
您需要使用openCursor方法逐个检索所有记录。仅获取键是不可能的。