@e22m4u/js-repository-mongodb-adapter
Version:
MongoDB адаптер для @e22m4u/js-repository
149 lines (116 loc) • 6.19 kB
Markdown
## @e22m4u/js-repository-mongodb-adapter
MongoDB адаптер для
[@e22m4u/js-repository](https://www.npmjs.com/package/@e22m4u/js-repository).
- [Установка](#установка)
- [Описание](#описание)
- [Источник данных](#источник-данных)
- [Ограничения](#ограничения)
- [Преобразование операторов](#преобразование-операторов)
- [Тесты](#тесты)
- [Лицензия](#лицензия)
## Установка
```bash
npm install @e22m4u/js-repository-mongodb-adapter
```
## Описание
Адаптер предоставляет возможность использовать MongoDB в качестве хранилища
данных для `@e22m4u/js-repository`. Он автоматически преобразует названия
моделей в названия коллекций, а также выполняет преобразование стандартных
операторов фильтрации в нативные запросы MongoDB.
#### ObjectId
Взаимодействие с репозиторием происходит с использованием строкового
представления идентификаторов. Адаптер самостоятельно преобразует строки
в `ObjectId` перед отправкой запросов в базу данных и выполняет обратное
преобразование при получении результатов. Это позволяет работать
с идентификаторами как с обычными строками без необходимости импортировать
`ObjectId` из драйвера MongoDB.
## Источник данных
Источник данных для MongoDB адаптера определяется с помощью метода
`defineDatasource` экземпляра `DatabaseSchema`.
**Параметры**
| название | значение по умолчанию | описание |
|----------|-----------------------|------------------------|
| protocol | `'mongodb'` | протокол подключения |
| host | `'127.0.0.1'` | имя хоста или IP адрес |
| port | `27017` | порт |
| database | `'database'` | название базы данных |
| username | `undefined` | имя пользователя |
| password | `undefined` | пароль |
Кроме перечисленных выше, адаптер поддерживает все стандартные параметры
`MongoClientOptions` из официального драйвера MongoDB для NodeJS. Эти
параметры можно передавать напрямую в определении источника данных.
**Пример**
```js
import {DatabaseSchema} from '@e22m4u/js-repository';
const dbs = new DatabaseSchema();
// объявление источника
dbs.defineDatasource({
name: 'myMongo', // название источника
adapter: 'mongodb', // имя адаптера
// параметры
host: '127.0.0.1',
port: 27017,
database: 'myDatabase',
});
// объявление модели
dbs.defineModel({
name: 'user', // название модели
datasource: 'myMongo', // используемый источник
properties: { // поля модели
name: 'string',
surname: 'string',
},
});
// получение репозитория и создание документа
const userRep = dbs.getRepository('user');
const user = await userRep.create({name: 'John', surname: 'Doe'});
console.log(user);
// {
// id: '64f3454e5e0893c13f9bf47e', // id является строкой
// name: 'John',
// surname: 'Doe',
// }
```
## Ограничения
- **Первичный ключ.**
Свойство, выступающее в роли первичного ключа, должно иметь
название `id` или `_id`. Использование других названий для
первичного ключа не поддерживается.
- **Автогенерация идентификатора.**
Автоматическая генерация `ObjectId` при создании нового документа
работает только для свойств с типом `string` или `any`. Для других
типов данных значение первичного ключа необходимо указывать вручную.
## Преобразование операторов
Адаптер преобразует стандартные операторы фильтрации в нативные операторы
запросов MongoDB.
| оператор | MongoDB |
|----------|--------------------------------|
| `and` | `$and` |
| `or` | `$or` |
| `nor` | `$nor` |
| `eq` | `$eq` |
| `neq` | `$ne` |
| `gt` | `$gt` |
| `lt` | `$lt` |
| `gte` | `$gte` |
| `lte` | `$lte` |
| `inq` | `$in` |
| `nin` | `$nin` |
| `between`| `{$gte: ..., $lte: ...}` |
| `exists` | `$exists` |
| `like` | `$regex` |
| `nlike` | `$not` с `$regex` |
| `ilike` | `$regex` с флагом `i` |
| `nilike` | `$not` с `$regex` и флагом `i` |
| `regexp` | `$regex` |
## Тесты
Запуск контейнера `mongo:latest` скриптом `setup.sh`
```bash
./setup.sh
```
Выполнение тестов
```bash
npm run test
```
## Лицензия
MIT