class_orm
v1.0.9
Published
1. В конфиг (путь по умолчанию в Windows: `C:\Program Files\MongoDB\Server\7.0\bin\mongod.cfg`) добавить строчки: ``` replication: replSetName: имя_replica_set ``` В тестах используется `rs0` имя replica set. 2. Перезапустить службу:
Downloads
20
Readme
Подключение replica set в MongoDB для работы транзакций:
- В конфиг (путь по умолчанию в Windows:
C:\Program Files\MongoDB\Server\7.0\bin\mongod.cfg
) добавить строчки:
В тестах используетсяreplication: replSetName: имя_replica_set
rs0
имя 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> }
— хранилище всех вариантов сортировки экземпляровT
shouldAutoUpdate: boolean
— флаг автоматического вызова обновления/удаления экземпляраT
из всехSortedList
при соответствующих действиях над экземпляомT
DatabaseCollections
— расширение Collections
возможностью сохранения/загрузки содержимого из БД.
MongoDBService
— класс работы с MongoDB БД и сериализуемыми коллекциями в формате Map<string, any[]>
и записью сериализованных данных по кускам:
client: MongoClient
— клиент MongoDBstatic db: Db
— конкретная база MongoDB