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

e22m4u f6e8ea73fa chore: bumps version to 0.8.0 1 неделя назад
.husky 297f901136 chore: adds CommonJS support 1 год назад
dist e9506e3680 refactor: should not remove the model suffix 1 неделя назад
src e9506e3680 refactor: should not remove the model suffix 1 неделя назад
.c8rc 9e8d810694 chore: initial commit 2 лет назад
.commitlintrc 9e8d810694 chore: initial commit 2 лет назад
.editorconfig 9e8d810694 chore: initial commit 2 лет назад
.gitignore 9e641d4ca8 chore: updates .gitignore 1 год назад
.mocharc.cjs 9e8d810694 chore: initial commit 2 лет назад
.prettierrc 9e8d810694 chore: initial commit 2 лет назад
LICENSE dbdff10f1e chore: updates license 4 месяцев назад
README.md acdfd71317 chore: updates README.md 1 месяц назад
build-cjs.js e207815a9a chore: updates esbuild config 1 год назад
eslint.config.js 5b403eaa6d chore: updates mongodb driver to 6.16.0 7 месяцев назад
jsconfig.json e9506e3680 refactor: should not remove the model suffix 1 неделя назад
mocha.setup.js 512818fafd chore: upgrades dependencies 1 год назад
package.json f6e8ea73fa chore: bumps version to 0.8.0 1 неделя назад
setup.sh 8021b929e8 chore: updates dependencies 4 месяцев назад
test.env 8021b929e8 chore: updates dependencies 4 месяцев назад

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