IndexedDB Dexie:如何通过列键只得到结果中的一列?(简单的值数组而不是对象数组)

vaqhlq81  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(1)|浏览(149)

我有一个获取查询

await useDatabase.data.where("ts").between(ms - 1000, ms).toArray();

我得到的结果正确,但作为一个对象的数据。

[
    {
        "ts": 60.1875,
        "sample": 0,
        "id": 1
    }, 
    {
        ...
    },
    {
        ...
    },
]

是否可以通过选择单个列而不是获取行的整个对象结果来最小化结果的大小?(示例)

[0,...]

在文档中没有找到任何内容。也许我遗漏了它或使用了错误的搜索关键字。

lymgl2op

lymgl2op1#

除非您有查询列的复合索引沿着要返回的另一列。

const useDatabase = new Dexie('myDatabase');
useDatabase.version(2).stores({
  data: 'id, [ts+sample]'
]);

await useDatabase.data.where("[ts+sample]").between(
  [ms - 1000, Dexie.minKey],
  [ms, Dexie.maxKey]
).keys();

这将仅给予[ms,sample]元组的数组。

[
    [60.1875, 0], 
    ...
]

您可以将其Map为仅获得“示例”属性:

result.map(([ts, sample]) => sample)

但如果性能不一致,您可以始终从原始请求执行此操作(无需添加索引):

result.map(({sample}) => sample)

相关问题