class_orm v1.0.9
Подключение replica set в MongoDB для работы транзакций:
- В конфиг (путь по умолчанию в Windows:
C:\Program Files\MongoDB\Server\7.0\bin\mongod.cfg) добавить строчки:
В тестах используетсяreplication: replSetName: имя_replica_setrs0имя replica set. - Перезапустить службу:
- Windows:
net stop MongoDB && net start MongoDB - Linux:
sudo systemctl stop mongod && sudo systemctl start mongod
- Windows:
- Подключиться к MongoDB серверу используя MongoDB Shell (для Windows скачать по ссылке на официальном сайте), пример для локальной БД с настройками по умолчанию:
mongo --host 127.0.0.1 --port 27017 - Инициализировать replica set:
rs.initiate()
После этого для переключения между обычным режимом и replica set будет достаточно 1-2 пунктов.
Тесты, запускаемые через npm test автоматически пропускают те из них, которые не подходят для текущей конфигурации.
Краткое описание классов
BaseEntity — базовый класс для работы с базой, остальные классы сущностей наследуют его. Хранит поля:
static entityConstructors: Map<string, any>— map конструкторов для восстановления из документа БДstatic entityId: WeakEntityCollection— класс для хранения прокси, используемых для отслеживания изменения полей через get/setonChangeCallback?: { remove: (item: BaseEntity) => void; insert: (item: BaseEntity) => void }— объект с методами вызова при изменении/удалении_id: ObjectId— идентификатор экземпляра класса_changedProperties: Set<string>— set изменённых полей экземпляра класса с момента создания или последней записи в БД
Методы представляют возможности по записи в базу одного/нескольких экземпляров класса (включая возможность рекурсивного сохранения всех вложенных классов), запросе одного экземпляра из базы, пополнени/очистке списка изменённых полей.
LazyPromise — класс ленивой загрузки экземпляров классов из БД. Хранит поля:
static promises: WeakEntityCollection— список promise ленивой загрузки всех экземпляров классаpromise?: Promise<T>— promise загрузки текущего экземпляра_id: ObjectId— идентификатор в базеcollectionName: string— имя коллекции в базе
Тип export type Lazy<T extends BaseEntity> = T | LazyPromise<T> предоставляет обёртку для типа лениво загружаемых полей или полноценных экземпляров класса.
WeakEntityCollection — класс для сборки мусора тех экземпляров классов, которые более не нужны:
map: Map<string, WeakRef<any>>— карте текущих экземпляров классовregistry: FinalizationRegistry<string>— список более не нужных экземпляров классов
EntitySerializer — класс для сериализации/десериализации объектов, способен также сериализировать и восстанавливать Array/Map/Set. Поля:
static serializedCollections: Map<string, any[]>— хранилище уже сериализованных объектов по классам, очищается при вызовеgetSerializedCollections()static processedEntities: Set<string>— хранилище ссылок на уже сериализованные объекты, очищается при вызовеgetSerializedCollections()static serializationHandlers: { [key: string]: (val: any, recursively: boolean) => SerializedValue }— обработчики сериализации отдельных классов
CacheList — класс закэшированного списка заданного размера, хранит данные в комбинации Array+Map, при доступе к отдельным элементам повышает их позицию в Array, неиспользуемые автоматически сдвигаются в конец пока не удалятся.
cacheSize: number— максимальный размер кэшаindexList: WrapEntity[]— список объектов, обёрнутых воWrapItem, хранящий указатель на объект и индекс закэшированном спискеmap: MapInterface<WrapEntity>— обёртка дляMap<string, WrapEntity>с дополнительными методами для удобства работы внутри закэшированного списка
SortedList — класс сортированного списка:
- доступна сортировка по одному полю (для полей типов, реализующих оператор сравнения) или с помощью произвольной функции
- доступна фильтрация по
Partial<T> - доступна выборка по интервалу (со строгими или нестрогими границами)
Поля:
items: T[]— сами объектыcompareFn: (a: T, b: T) => number— функция сравненияcompareKey?: MaybeBasePropertyKeys<T>— поля для фильтрации/обрезки по промежутку значений
Замена функции сортировки невозможна, для этого создаётся новый экземпляр с новой сортировкой.
Collections — класс, комбинирующий в себе произвольное количество SortedList с разными сортировками и возможностью задания автоматического удаления значений из Collections. Стандартные возможности работы с SortedList также доступны (например, обрезание списка по интервалу значений)Ж
indices: { [name: string]: SortedList<T> }— хранилище всех вариантов сортировки экземпляровTshouldAutoUpdate: boolean— флаг автоматического вызова обновления/удаления экземпляраTиз всехSortedListпри соответствующих действиях над экземпляомT
DatabaseCollections — расширение Collections возможностью сохранения/загрузки содержимого из БД.
MongoDBService — класс работы с MongoDB БД и сериализуемыми коллекциями в формате Map<string, any[]> и записью сериализованных данных по кускам:
client: MongoClient— клиент MongoDBstatic db: Db— конкретная база MongoDB