如何正确更新IndexedDB中的文档?

问题描述 投票:0回答:1

[object store'data'之间有一个keyPath: 'id',如下所示的结构化数据

{"id":860,
  "data":{
    "a":[], // json array 
    "b":[], // json array 
    "c":{}, // json object
    "d":{}, // json object
  }
}

不得重复此结构化数据,并且只能在data对象存储库中写入此结构化数据中的一个。但是,可以对其进行更新和扩展。

为了更新此文档,到目前为止,我所做的是获取整个文档并追加数据,然后像下面这样重写和替换旧文档:

if (data != undefined) {
    data.a.push(obj); <= update 
    var item = { id:860, data: data };
    write('data', item); <= replace on the old document 
}

尽管这还不够好。因为,当文档很大时,我必须在旧文档上fat fat documentreplace fat document

您知道如何通过不使用获取和替换来更新文档吗?

评论/答案

我不太确定为什么您要一个对象存储N个数据记录而不是N个对象。

该项目旨在仅处理该文档的一个实例。因为每个ID都基于1个身份实例。因此,我应防止object store复制此文档,无论是旧文档还是新文档。

值得一提的是,代码的其他部分处理了该文档的1个实例。否则,将引发异常或新旧文档混合出现。

但是在那个对象中,您拥有不断增长的数据。那是什么点更大的对象?

拥有单个文档实例的主要目的是[CRUD上的完整性和简化 indexedDB”。

例如:如果我实际上将电流object store划分为几个object store,则会使indexedDB的维护更加困难。因为,我必须处理几个object store,而不是处理object store。确实,不断更新object stores会更加困难。

javascript indexeddb
1个回答
1
投票

据我所知,在使用IDB数据时,您必须读入并传递整个对象。如果发现设置存在性能问题,则可以考虑将大对象分解为许多对象。

© www.soinside.com 2019 - 2024. All rights reserved.