如何使用 dexie 在 indexedDB 中保存对象,其中 1 个字段是对象数组?

Posted

技术标签:

【中文标题】如何使用 dexie 在 indexedDB 中保存对象,其中 1 个字段是对象数组?【英文标题】:How save object in indexed DB wth dexie where 1 of the fields is array of objects? 【发布时间】:2021-08-24 15:24:57 【问题描述】:

我有索引数据库的下一个配置

import Dexie from 'dexie';

const db = new Dexie("dbName");
db.version(1).stores(
    users: '++id, name,company,confirmPassword,email,password,*permissions'
);

const saveClient = async (client) => 
  return await db.users.add(client);
;

export 
  saveClient
;

其中权限是对象数组

 
  name: 'Alex',
  company: 'Company',
  password: 'Password',
  confirmPassword: 'Password',
  permissions : [id:1, id:2] //permisions
 

我应该描述这个字段以特殊方式添加新对象到存储吗?

【问题讨论】:

除非你需要索引数组 【参考方案1】:

您可以在 indexedDB 中存储任何结构,包括对象数组,而无需在索引中对其进行描述。索引应仅列出您想在查询中使用的属性。

索引可以是plain 或multiEntry。普通索引适用于属性本身,而多条目索引则适用于数组中的每个条目。但是,这些条目必须是纯值而不是对象 - 因为对象本身不可索引。

因此,如果您的意图是查询所有具有 id = X 权限的用户,则需要将每个权限存储为普通 ID 号 ([1, 2, ...]) 而不是对象 [ id: 1,id: 2, ...]。

【讨论】:

以上是关于如何使用 dexie 在 indexedDB 中保存对象,其中 1 个字段是对象数组?的主要内容,如果未能解决你的问题,请参考以下文章

在 Quasar 中使用 Dexie 导出 IndexedDB 数据库

使用 dexie 和 angular 从 indexedDB 获取数据

缓存 - IndexedDB - Dexie.js

有没有人将 Dexie 与 localbase 进行比较?

Dexie 不在生产版本中存储数据,但在开发版本中一切正常

有没有更好的方法可以使用 dexie 在 svelte 中编写此代码?