MongoDB — это база данных NoSQL без схемы с гибкой структурой документов, в отличие от баз данных SQL. Использование MongoDB в качестве базы данных дает множество преимуществ, от простого масштабирования до современных функций базы данных, таких как транзакции.

MongoDB также поддерживает библиотеки моделирования объектных данных (ODM), такие как Mongoose. ODM управляют связями данных, проверяют схемы и преобразовывают объекты в модели данных. Они упрощают взаимодействие с базой данных MongoDB.

За несколько шагов вы узнаете, как использовать MongoDB в приложении NestJS с помощью специального пакета NestJS mongoose.

Шаг 1: Установка зависимостей

Прежде чем использовать Mongoose в своем приложении NestJS, вы должны установить его вместе с собственным пакетом NestJS.

Установите mongoose и его собственный пакет NestJS, используя менеджер пакетов npm запустив:

установка нпм @nestjs/ мангуст мангуст

Шаг 2: Подключение к MongoDB

Когда установка завершится, перейдите к app.module.ts файл. Затем импортируйте МангустМодуль из @гнездо/мангуст:

instagram viewer
импорт {Модуль мангуста} из '@nestjs/мангуст';

Затем в вашем массиве импорта вызовите метод forRoot метод на МангустМодуль и передайте свой URI MongoDB в качестве аргумента:

импорт: [MongooseModule.forRoot(process.env. MONGODB_URI)],

forRoot метод разделяет соединение с базой данных через все модули в вашем приложении. Он принимает необязательный объект конфигурации; вы можете узнать больше об этом в мангуста документация по опциям.

Шаг 3: Создание схемы Mongoose

Схема — это объект JSON, который определяет структуру и содержимое ваших данных. Вам нужно будет создать его, чтобы определить, как Mongoose хранит ваши данные в базе данных MongoDB.

В корневом модуле вашего приложения создайте «схемы" папка. В этой папке вы будете хранить все файлы схемы.

Внутри вашего схемы папку, создайте файл схемы и назовите его, используя соглашение об именах NestJS (.schema.ts).

Затем добавьте в файл схемы следующие импорты:

импорт { Опора, схема, фабрика схем} из "@nestjs/мангуст";
импорт {Документ} из "мангуста";

Опора декоратор помечает свойства, которые он аннотирует, как свойство в вашей базе данных MongoDB.

Схема декоратор помечает класс, который он аннотирует, как схему.

SchemaFactory класс содержит статические методы, используемые для создания модели.

Мангуст Документ представляет собой однозначное сопоставление с документами, хранящимися в MongoDB. Он понадобится вам как аннотация типа.

Затем, создать класс, аннотируйте его с помощью Схема декоратор, чтобы пометить его как схему Mongoose, и экспортировать его:

@Схема()
экспортучебный классДемо{}

Затем создайте и экспортируйте тип объединения с вашим классом и Документ:

экспорттип DemoDocument = Демо и документ;

Затем добавьте нужные свойства в класс и аннотируйте их с помощью Опора декоратор. Вы можете передать необязательный объект конфигурации в Опора декоратор и установите свойство по мере необходимости:

@Схема()
экспортучебный классДемо{
@Prop({ требуется: истинный })
свойство_1: строка;
}

Мангуста документация описывает объект конфигурации более подробно.

Наконец, создайте и экспортируйте модель Mongoose через SchemaFactoryх создатьForClass и передайте свой класс в качестве аргумента:

экспортконстанта DemoSchema = SchemaFactory.createForClass (Демо);

Ваша завершенная схема должна выглядеть так:

импорт { Опора, схема, фабрика схем} из '@nestjs/мангуст';
импорт {Документ} из 'мангуста';

экспорттип DemoDocument = Демо и документ;

@Схема()
экспортучебный классДемо{
@Prop({ требуется: истинный })
свойство_1: строка;

@Prop({ требуется: истинный })
свойство_2: номер;

@Prop()
свойство_3: строка;

@Prop({ требуется: истинный })
свойство_4: логический;
}

экспортконстанта DemoSchema = SchemaFactory.createForClass (Демо);

Шаг 4: Регистрация схемы

Перейдите в папку вашего модуля и добавьте следующие импорты:

импорт {Модуль мангуста} из '@nestjs/мангуст';
импорт {Демонстрация, ДемоСхема} из '../схемы/демо.схема';

Далее создайте «импортмассив внутри @модуль декоратор. Затем внутри массива вызовите forFeature метод на МангустМодуль.

forFeature Метод принимает массив моделей Mongoose. Передайте объект конфигурации с имя свойство, установленное на имя вашего класса схемы, и схема свойство, установленное для созданной вами схемы:

МангустМодуль.forFeature([{имя: Demo.name, схема: DemoSchema}]),

Шаг 5: Внедрение модели Mongoose

Затем вам нужно внедрить модель Mongoose, чтобы включить запросы к вашей базе данных, вызывая методы Mongoose в модели.

Перейдите к классу обслуживания вашего модуля и добавьте следующие импорты:

импорт {Модель} из 'мангуста';
импорт {ИнжектМодель} из '@nestjs/мангуст';
импорт { Демонстрация, демодокумент } из '../схемы/демо.схема';

Использовать Модель interface в качестве определения типа для вашей модели, предоставляя ей доступ к методам Mongoose.

ИнжектМодель декоратор внедряет модель Mongoose в конструктор вашего класса обслуживания.

Далее создайте конструктор внутри вашего класса обслуживания. Это должно занять частный переменная в качестве аргумента, Модель с универсальным типом ДемоДокумент. Аннотируйте свою частную переменную с помощью ИнжектМодель декоратор и передайте имя класса схемы в качестве аргумента:

@Инъекционный()
экспортучебный классДемоСервис{
конструктор(
@InjectModel(демо.название)
частная демонстрацияМодель: Модель<ДемоДокумент>,
) {}
}

Вы можете запросить свою базу данных MongoDB, вызвав методы Mongoose для вашей частной переменной (демоМодель).

Преимущества использования MongoDB

Помимо сильного онлайн-сообщества и простоты использования, MongoDB обеспечивает высокую доступность и стабильность данных. Он предлагает ускоренную аналитику, агрегацию данных и многое другое, что делает его идеальной базой данных для ваших проектов.