我有一个 IndexedDB 的变化。我像这样添加一个项目,然后记录结果以检查 key 是否已成功创建:
_this._idb.add('steps', step).done(function (items) {
var item = items[0];
_logger.log("ADDED STEP", { id: item.__id__, step: item }, "CT");
});
此输出符合预期:
...可以看到,对象存储的时候已经添加了id。
但是,当我查询数据库以取回对象列表时,使用以下代码:
this._idb.steps.query('timestamp').bound(start, end).execute().done(function (results) {
_logger.log("Results", results, "CT");
}
我没有将 id 作为返回对象的一部分:
...并且缺少 id 使得无法更新和删除。
当我使用 db.js 查询索引数据库时,如何获取项目的 ID - 或者我是否以错误的方式处理此问题,还有我应该做的其他事情吗?
(注意:我正在使用 TypeScript 来编译 JS,但我认为这与这个问题没有特别相关)
最佳答案
这是预期的行为,如果您 don't define a keyPath
in your db schema,您只会获得 __id__
属性.
因为没有 keyPath
定义,该值在 indexeddb 中没有与之关联,它仅在添加后添加到结果对象中,因为此时在时间我们知道 IndexedDB 分配给它的自动增量值。
由于该值实际上并不是对象的一部分,所以当它在查询过程中出现时,我没有任何方法可以将它分配给对象,也许我可以使用数组中的位置,但更有可能是错误多于正确。
如果您希望针对对象保留 ID,那么您需要 define a keyPath
as part of the object store schema属性将是 added to the resulting object and available它将在对象上 returned from a query .
免责声明 - 我写了 db.js
关于javascript - 使用db.js查询IndexedDB时如何获取key和value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23641482/