如何对 chrome.storage 数据的子集进行操作

How can I operate on a subset of chrome.storage data

我将数据作为一个对象存储在我的扩展程序的同步存储中。有时我需要直接访问我的树中的一个 'leaf',有时我需要整个数据。看起来像这样:

{
    someNode: ...,
    otherNode: { ... },
    exclusions: {
         'someName': [
             item1Constant,
             item5Constant,
         ],
         'someOtherName': [ ... ]
    }
}

如何在不使用整个排除树的情况下更改 someName 下的常量数组?将所有 'someName' 节点放在没有排除包装器的顶层似乎不是一个好的解决方案,因为该级别还有其他数据。

以下更新只是 someName,还是会替换所有 exclusions

 chrome.storage.sync.set({ 'exclusions' : { [someNameVar] : [...] } }, () => { ... });

这个替代方案怎么样 - 它是在排除文件上创建一个新节点,还是在顶层创建一个新节点,名称中有一个点?

 chrome.storage.sync.set({ ['exclusions.' + [someNameVar]] : [...] } }, () => { ... });

如何在 get 中只访问 someName 数据?我知道对于顶层我只能指定一个 属性,但我不知道只对 'sub node':

有什么用
chrome.storage.sync.get(['exclusions'], (result) => { ... });

对象表示法是否符合我的预期?我的怀疑是,不

chrome.storage.sync.get({ 'exclusions' : { 'someNameVar' } }, () => { ... });

chrome.storage.sync.get(['exclusion.someNameVar'], () => { ... });

排除项可能会变大,所以我不想使用完整数据(并且 chrome 对邮件大小有限制)

感谢wOxxOm提供的以下几点:

  • 你不能"operate on a subset of chrome.storage data"。就像一个数据库:一个键等于一个条目
  • Built-in 同步存储为 extremely limited (100kB),因此您永远不会超过消息限制 (~128MB),FWIW 您可能想要使用压缩或完全不同的云提供商。
  • P.S。 foo.bar 不是分层路径,它只是存储中单个条目的单个字符串键

并且因为 它确认我无法获得所有带有前缀的键(不加载整个文档)似乎唯一可行的解​​决方案是执行以下操作:

{
    someNode: ...,
    otherNode: { ... },
    exclusions: [
         'someName',
         'someOtherName'
    ],
    'someName': [
         item1Constant,
         item5Constant,
     ],
     'someOtherName': [ ... ]
}

这意味着分两步做事并复制一些数据,但它允许直接编辑每个项目(someName/someOtherName,等),同时仍然允许检索所有排除数据而不加载不相关的项目(otherNode等)

注意:同步存储仍然有最多 512 个项目的限制。因此,您可以创建 'exclusion keys' 个

是有限制的