javascript - 使用db.js查询IndexedDB时如何获取key和value?

标签 javascript indexeddb db.js

我有一个 IndexedDB 的变化。我像这样添加一个项目,然后记录结果以检查 key 是否已成功创建:

_this._idb.add('steps', step).done(function (items) {
        var item = items[0];
        _logger.log("ADDED STEP", { id: item.__id__, step: item }, "CT");
    });

此输出符合预期:

enter image description here

...可以看到,对象存储的时候已经添加了id。

但是,当我查询数据库以取回对象列表时,使用以下代码:

this._idb.steps.query('timestamp').bound(start, end).execute().done(function (results) {
        _logger.log("Results", results, "CT");
    }

我没有将 id 作为返回对象的一部分:

enter image description here

...并且缺少 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/

相关文章:

angularjs - IndexedDB回调不更新AngularJS中的UI

javascript - 动态创建特定数量的输入表单元素

javascript - 使用 jQuery 获取多选的最新选项

javascript - AngularJS ng-options 在选择选项后删除了默认空白值

javascript - JQuery 中的属性

javascript - 我如何找出 IndexedDB 中可用的数据库?

indexeddb - 获取刚刚保存在 Dexie 中的 key 值

javascript - IndexedDB : restrictions? 中的无效键路径