如何对 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' 个
是有限制的
我将数据作为一个对象存储在我的扩展程序的同步存储中。有时我需要直接访问我的树中的一个 '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' 个
是有限制的