Модуль для работы с базами данных для Node.js
npm install @e22m4u/js-repository
Опционально устанавливаем адаптер.
| описание | |
|---|---|
memory |
виртуальная база в памяти процесса (не требует установки) |
mongodb |
MongoDB - система управления NoSQL базами (установка) |
Определение источника данных, модели и добавление нового документа в коллекцию.
import {Schema} from '@e22m4u/js-repository';
import {DataType} from '@e22m4u/js-repository';
// 1. создание экземпляра Schema
const schema = new Schema();
// 2. определение источника "myMemory"
schema.defineDatasource({
name: 'myMemory', // название нового источника
adapter: 'memory', // выбранный адаптер
});
// 3. определение модели "country"
schema.defineModel({
name: 'country', // название новой модели
datasource: 'myMemory', // выбранный источник
properties: { // поля модели
name: DataType.STRING, // поле "name" типа "string"
population: DataType.NUMBER, // поле "population" типа "number"
},
})
// 4. получение репозитория для модели "country"
const countryRep = schema.getRepository('country');
// 5. добавление нового документа в коллекцию "country"
const country = await countryRep.create({
name: 'Russia',
population: 143400000,
});
// вывод результата
console.log(country);
// {
// "id": 1,
// "name": "Russia",
// "population": 143400000,
// }
Разбор примера
Экземпляр класса Schema хранит информацию об источниках
данных, моделей и предоставляет методы для их определения.
import {Schema} from '@e22m4u/js-repository';
// 1. создание экземпляра Schema
const schema = new Schema();
С помощью метода schema.defineDatasource определяются
источники данных, которые хранят название адаптера и его настройки.
// 2. определение источника "myMemory"
schema.defineDatasource({
name: 'myMemory', // название нового источника
adapter: 'memory', // выбранный адаптер
});
Когда источник определен, можно описать структуру документа коллекции
методом schema.defineModel.
import {DataType} from '@e22m4u/js-repository';
// 3. определение модели "country"
schema.defineModel({
name: 'country', // название новой модели
datasource: 'myMemory', // выбранный источник
properties: { // поля модели
name: DataType.STRING, // поле "name" типа "string"
population: DataType.NUMBER, // поле "population" типа "number"
},
});
Наличие параметра datasource в определении модели
позволяет получить репозиторий по ее названию методом
schema.getRepository.
// 4. получение репозитория для модели "country"
const countryRep = schema.getRepository('country');
Репозиторий является инструментом для чтения и записи документов определенной модели.
// 5. добавление нового документа в коллекцию "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();
// определение источника
schema.defineDatasource({
name: 'myMemory', // название нового источника
adapter: 'memory', // выбранный адаптер
});
// определение модели
schema.defineModel({
name: 'country', // название новой модели
datasource: 'myMemory', // выбранный источник
});
Определяется методом schema.defineDatasource
Параметры
name: string уникальное названиеadapter: string выбранный адаптерПример
schema.defineDatasource({
name: 'myMemory', // название нового источника
adapter: 'memory', // выбранный адаптер
});
Определяется методом schema.defineModel
Параметры
name: string название модели (обязательно)base: string название наследуемой моделиtableName: string название коллекции в базеdatasource: string выбранный источник данныхproperties: object определения полей моделиrelations: object определения связей (см. Связи)Пример
schema.defineModel({
name: 'country', // название новой модели
datasource: 'myMemory', // выбранный источник
properties: { // поля модели
name: DataType.STRING, // поле "name" типа "string"
population: DataType.NUMBER, // поле "population" типа "number"
},
});
Получить репозиторий методом schema.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 country = await countryRep.create({
name: 'Russia',
population: 143400000,
});
// вывод результата
console.log(country);
// {
// "id": 1,
// "name": "Russia",
// "population": 143400000,
// }
npm run test
MIT