MongoDB адаптер для @e22m4u/js-repository

e22m4u bb7fc61b99 chore: bumps version to 0.8.2 3 days ago
.husky 297f901136 chore: adds CommonJS support 1 year ago
dist 5dd85728fa refactor: improves linting 3 days ago
src 24d63c33fa chore: updates dependencies 3 days ago
.c8rc 9e8d810694 chore: initial commit 2 years ago
.commitlintrc 9e8d810694 chore: initial commit 2 years ago
.editorconfig 9e8d810694 chore: initial commit 2 years ago
.gitignore 9e641d4ca8 chore: updates .gitignore 1 year ago
.mocharc.json 24d63c33fa chore: updates dependencies 3 days ago
.prettierrc 9e8d810694 chore: initial commit 2 years ago
LICENSE dbdff10f1e chore: updates license 4 months ago
README.md acdfd71317 chore: updates README.md 1 month ago
build-cjs.js e207815a9a chore: updates esbuild config 1 year ago
eslint.config.js 5dd85728fa refactor: improves linting 3 days ago
jsconfig.json 24d63c33fa chore: updates dependencies 3 days ago
mocha.setup.js 5dd85728fa refactor: improves linting 3 days ago
package.json bb7fc61b99 chore: bumps version to 0.8.2 3 days ago
setup.sh 8021b929e8 chore: updates dependencies 4 months ago
test.env 8021b929e8 chore: updates dependencies 4 months ago

README.md

@e22m4u/js-repository-mongodb-adapter

MongoDB адаптер для @e22m4u/js-repository.

Установка

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. Эти параметры можно передавать напрямую в определении источника данных.

Пример

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

./setup.sh

Выполнение тестов

npm run test

Лицензия

MIT