RxDB - это библиотека для работы с базами данных в режиме реактивности внутри веб-приложений. Она предоставляет возможность работать с данными в формате JSON, а также обеспечивает синхронизацию данных между клиентом и сервером.
Для работы с вложенными массивами и объектами в RxDB, вам понадобится знание о двух основных концепциях:
1. Модели данных (Schemas):
Для определения структуры данных используется схема (Schema). Схема описывает поля объекта, их типы и другие параметры. Каждый объект в базе данных соответствует определенной схеме. Вы также можете определить вложенные схемы для работы с вложенными массивами или объектами.
Например, для определения модели пользователя с вложенным массивом "адресов" вы можете использовать следующий код:
const userSchema = { version: 0, type: 'object', properties: { name: { type: 'string' }, addresses: { type: 'array', items: { type: 'string' } } } };
2. Observable-паттерн (наблюдение):
RxDB использует Observable-паттерн для отслеживания изменений в данных и автоматической синхронизации. При изменении данных в базе данных, RxDB автоматически уведомляет об этом все потребители Observable.
Для внесения изменений во вложенные массивы или объекты, вам необходимо получить доступ к соответствующему объекту данных и использовать свойство $.update()
или $.unset()
для изменения данных. $
- это Observable-объект, предоставляемый RxDB для каждого объекта в базе данных.
Например, для обновления массива "addresses" в модели пользователя:
const user = await db.user.find().exec(); // Получить объект пользователя user.atomicSet('addresses', ['адрес1', 'адрес2']); // Заменить весь массив адресов
Если вы хотите изменить только одно значение в массиве, то вы можете использовать методы массива, такие как push()
, pop()
, splice()
и т.д. В этом случае вам необходимо вызвать метод atomicSet()
для сохранения изменений.
user.atomicSet('addresses', user.addresses.push('новый адрес'));
В случае изменения вложенных объектов, вы можете использовать метод atomicSet()
для обновления конкретного значения.
user.atomicSet('адрес1', 'новый адрес'); // Обновить значение адреса "адрес1"
Важно отметить, что при использовании atomicSet()
или atomicUnset()
RxDB выполнит автоматическую синхронизацию данных с другими клиентами или сервером.
В заключение, работа с вложенными массивами или объектами в RxDB осуществляется через определение соответствующих моделей данных и использование методов atomicSet()
или atomicUnset()
для внесения изменений. Все изменения автоматически синхронизируются с другими клиентами и сервером.