## @e22m4u/js-repository Модуль для работы с базами данных для Node.js ## Установка ```bash npm install @e22m4u/js-repository ``` Опционально устанавливаем адаптер для базы данных. | | описание | |-----------|--------------------------------------------------------------------------------------------------------------------------------| | `memory` | виртуальная база в памяти процесса (не требует установки) | | `mongodb` | MongoDB - система управления NoSQL базами (*[установка](https://www.npmjs.com/package/@e22m4u/js-repository-mongodb-adapter))* | ## Введение Модуль позволяет объединить несколько баз данных в единую абстракцию «Схема». Являясь экземпляром класса `Schema`, абстракция предоставляет методы для определения «Источника данных» и «Модели». Источник заботится о подключении к базе, а модель описывает структуру документа коллекции и связи к другим моделям. Непосредственно чтение и запись производится с помощью «Репозитория», который можно получить для каждой модели, если она имеет источник данных. ```mermaid flowchart TD A[Схема] subgraph Базы данных B[Источник 1] C[Источник 2] end A-->B A-->C subgraph Коллекции D[Модель A] E[Модель Б] F[Модель В] G[Модель Г] end B-->D B-->E C-->F C-->G H[Репозиторий A] I[Репозиторий Б] J[Репозиторий В] K[Репозиторий Г] D-->H E-->I F-->J G-->K ``` Репозиторий имеет набор методов для различных операций с документами модели. Некоторые из методов позволяют разрешать связи в момент обращения к данным, встраивая документы других моделей в результат выборки. Если модель `city` в своем определении имеет связь `country`, то пример запроса с включением связанных документов методом `find` может выглядеть так: ```js const cities = await cityRep.find({ include: 'country', // включить "country" в результат }); console.log(cities); // [ // { // "id": 24, // "name": "Moscow", // "countryId": 12, <= ключ целевой модели // "country": { <= связанный документ // "id": 12, // "name": "Russia", // } // }, // { // "id": 25, // "name": "Bangkok", // "countryId": 13, <= ключ целевой модели // "country": { <= связанный документ // "id": 13, // "name": "Thailand", // } // }, // ... // ] ``` ## Тесты ```bash npm run test ``` ## Лицензия MIT