Как сохранить объект в индексированной БД с помощью dexie, где 1 из полей представляет собой массив объектов?

У меня есть следующая конфигурация для индексированной базы данных

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
 }

Должен ли я описывать это поле специальным образом для добавления нового объекта в хранилище?


person Александр Матыка    schedule 07.06.2021    source источник
comment
нет, если вам не нужно индексировать массив   -  person Josh    schedule 07.06.2021


Ответы (1)


В indexedDB можно хранить любую структуру, включая массив объектов, не описывая ее в индексе. Индексы должны перечислять только те свойства, которые вы хотите использовать в своих запросах.

Индексы могут быть простыми или multiEntry. Простые индексы работают с самим свойством, а индексы с несколькими записями работают с каждой записью в массивах. Однако эти записи должны быть простыми значениями, а не объектами, поскольку объекты сами по себе не индексируются.

Поэтому, если вы хотите запросить всех пользователей, имеющих разрешение с id = X, вам нужно будет хранить каждое разрешение как обычный идентификационный номер ([1, 2, ...]), а не как объекты [{id: 1 }, {id: 2}, ...].

person David Fahlander    schedule 07.06.2021