Система изначально имеет определенную структуру базы данных. Эта структура может быть получена из sql - базы данных с помощью процедуры синхронизации данных, или просто использоваться текущая из git.
Файл со структурой базы данных хранится в modules/models/serverconfig.js
Любой модуль может расширить любую модель дополнительными полями. Все изменения в базе данных, которые делает модуль находятся в его папке в файле db.js
Рассмотрим расширение модели пользователя в модуле login:
В данном примере модель расширяется 2 полями: UserPhoto и MailCode. Остальным полям просто добавляются расширенные свойства. Например для поля MobilePhone указывается маска редактирования, а для полей с паролем и солью указывается, что эти поля по умолчанию запрашивать из базу ненужно.
Кроме объявления или изменения полей, мы так же можем написать логику работы схемы: объявить новые методы или написать новые обработчики.
В нашем примере, мы написали, что при установке адреса электронной почты или логина пользователя мы переводим значения в нижний регистр. Также мы написали логику хранения паролей, объявив виртуальное поле password.
В дальнейшем в коде присвоение пароля будет выглядеть как:
Хотя на самом деле пароль в базе данных присутствовать не будет, вместо поля password сохранятся PassHash и PassSalt
При работе с моделями можно указывать любой тип данных поддерживаемый MongoDb и надстройкой над ней Mongoose
На стороне клиента вся информация о структуре моделей тоже присутствует
Вы можете создать любую модель с помощью вызова функции MModels.Create. В качестве аргументов передаются 2 параметра: название модели и объект со значением полей. Недостающие поля будут инициализированы значениями по умолчанию.
Пример создания и работы с моделью (код выполнен в консоли разработчика):