Модуль для работы с базами данных для Node.js
npm install @e22m4u/js-repository
Опционально устанавливаем адаптер.
| описание | |
|---|---|
memory |
виртуальная база в памяти процесса (не требует установки) |
mongodb |
MongoDB - система управления NoSQL базами (установка) |
Определение источника данных, модели и добавление нового документа в коллекцию.
import {Schema} from '@e22m4u/js-repository';
import {DataType} from '@e22m4u/js-repository';
// создание экземпляра Schema
const schema = new Schema();
// определение источника "myMemory"
schema.defineDatasource({
name: 'myMemory', // название нового источника
adapter: 'memory', // выбранный адаптер
});
// определение модели "country"
schema.defineModel({
name: 'country', // название новой модели
datasource: 'myMemory', // выбранный источник
properties: { // поля модели
name: DataType.STRING, // поле "name" типа "string"
population: DataType.NUMBER, // поле "population" типа "number"
},
})
// получение репозитория для модели "country"
const countryRep = schema.getRepository('country');
// добавление нового документа в коллекцию "country"
const country = await countryRep.create({
name: 'Russia',
population: 143400000,
});
// вывод результата
console.log(country);
// {
// "id": 1,
// "name": "Russia",
// "population": 143400000,
// }
Экземпляр класса Schema хранит определения источников данных и моделей.
Методы
defineDatasource(datasourceDef: object): this - добавить источникdefineModel(modelDef: object): this - добавить модельgetRepository(modelName: string): Repository - получить репозиторийПример
import {Schema} from '@e22m4u/js-repository'
// создание экземпляра
const schema = new Schema();
Источник хранит название выбранного адаптера и его настройки. Определяется
методом defineDatasource экземпляра схемы.
Параметры
name: string уникальное названиеadapter: string выбранный адаптерПример
schema.defineDatasource({
name: 'myMemory', // название нового источника
adapter: 'memory', // выбранный адаптер
});
Описывает структуру документа коллекции и связи к другим моделям. Определяется
методом defineModel экземпляра схемы.
Параметры
name: string название модели (обязательно)base: string название наследуемой моделиtableName: string название коллекции в базеdatasource: string выбранный источник данныхproperties: object определения свойств (см. Свойства)relations: object определения связей (см. Связи)Пример
schema.defineModel({
name: 'user', // название новой модели
properties: { // свойства модели
name: DataType.STRING,
age: DataType.NUMBER,
},
});
// пример документа модели "user"
// {
// "name": "Fedor",
// "age": 24
// }
Выполняет операции чтения и записи документов определенной модели.
Получить репозиторий можно методом getRepository экземпляра схемы.
Методы
create(data, filter = undefined) добавить новый документreplaceById(id, data, filter = undefined) заменить весь документpatchById(id, data, filter = undefined) частично обновить документpatch(data, where = undefined) обновить все документы или по условиюfind(filter = undefined) найти все документы или по условиюfindOne(filter = undefined) найти первый документ или по условиюfindById(id, filter = undefined) найти документ по идентификаторуdelete(where = undefined) удалить все документы или по условиюdeleteById(id) удалить документ по идентификаторуexists(id) проверить существование по идентификаторуcount(where = undefined) подсчет всех документов или по условиюАргументы
id: number|string идентификатор (первичный ключ)data: object объект отражающий состав документаwhere: object параметры выборки (см. Фильтрация)filter: object параметры возвращаемого результата (см. Фильтрация)Пример
// получение репозитория для модели "country"
const countryRep = schema.getRepository('country');
// добавление нового документа в коллекцию "country"
const country = await countryRep.create({
name: 'Russia',
population: 143400000,
});
// вывод результата
console.log(country);
// {
// "id": 1,
// "name": "Russia",
// "population": 143400000,
// }
Параметр properties находится в составе определения модели и принимает
объект, ключи которого являются полями документа, а значением тип поля
или объект с дополнительными параметрами.
Тип данных
DataType.ANY разрешено любое значениеDataType.STRING только значение типа stringDataType.NUMBER только значение типа numberDataType.BOOLEAN только значение типа booleanDataType.ARRAY только значение типа arrayDataType.OBJECT только значение типа objectПараметры
type: string тип допустимого значения (обязательно)itemType: string тип элемента массива (для type: 'array')model: string модель объекта (для type: 'object')primaryKey: boolean объявить поле первичным ключомcolumnName: string переопределение названия колонкиcolumnType: string тип колонки (определяется адаптером)required: boolean объявить поле обязательнымdefault: any значение по умолчаниюПример
schema.defineModel({
name: 'city',
properties: { // свойства модели
name: DataType.STRING, // краткое определение поля "name"
population: { // расширенное определение поля "population"
type: DataType.NUMBER, // тип поля (обязательно)
default: 0, // значение по умолчанию
},
},
});
// пример документа модели "city"
// {
// "name": "Moscow",
// "population": 11980000
// }
Параметр relations находится в составе определения модели и принимает
объект, ключ которого является названием связи, а значением объект
с параметрами.
Параметры
type: string тип связиmodel: string целевая модельforeignKey: string поле для идентификатора целиpolymorphic: boolean|string объявить связь полиморфной*discriminator: string поле для названия целевой модели (для polymorphic: true)i. Полиморфный режим позволяет динамически определять целевую модель по ее названию, которое хранит документ в поле-дискриминаторе.
Тип связи
belongsTo - документ содержит поле с идентификатором целевой моделиhasOne - обратная сторона belongsTo по принципу "один к одному"hasMany - обратная сторона belongsTo по принципу "один ко многим"referencesMany - документ содержит массив с идентификаторами целевой моделиbelongsTo
Базовое определение belongsTo
{
type: RelationType.BELONGS_TO,
model: 'target',
foreignKey: 'targetId', // опционально
}
Полиморфная версия belongsTo
{
type: RelationType.BELONGS_TO,
polymorphic: true,
foreignKey: 'referenceId', // опционально
discriminator: 'referenceType', // опционально
}
hasOne
Базовое определение hasOne
{
type: RelationType.HAS_ONE,
model: 'target',
foreignKey: 'sourceId',
}
Полиморфная версия hasOne с указанием имени связи целевой модели.
{
type: RelationType.HAS_ONE,
model: 'target',
polymorphic: 'relation',
}
Полиморфная версия hasOne с указанием свойств целевой модели.
{
type: RelationType.HAS_ONE,
model: 'target',
polymorphic: true,
foreignKey: 'referenceId',
discriminator: 'referenceType,
}
hasMany
Базовое определение hasMany
{
type: RelationType.HAS_MANY,
model: 'target',
foreignKey: 'sourceId',
}
Полиморфная версия hasMany с указанием имени связи целевой модели.
{
type: RelationType.HAS_MANY,
model: 'target',
polymorphic: 'relation',
}
Полиморфная версия hasMany с указанием свойств целевой модели.
{
type: RelationType.HAS_MANY,
model: 'target',
polymorphic: true,
foreignKey: 'referenceId',
discriminator: 'referenceType,
}
referencesMany
Определение связи referencesMany
{
type: RelationType.REFERENCES_MANY,
model: 'target',
foreignKey: 'targetIds', // опционально
}
npm run test
MIT
Generated using TypeDoc