MongoDB տվյալների բազայի օգտագործումը NestJS հավելվածում Mongoose-ով


Ներկայացնում ենք Mongoose գրադարանը, որը հեշտացնում է MongoDB-ի օգտագործումը:

MongoDB-ն առանց սխեմաների NoSQL տվյալների բազա է՝ փաստաթղթային ճկուն կառուցվածքներով, ի տարբերություն SQL տվյալների բազաների: MongoDB-ի օգտագործումը որպես տվյալների բազա բերում է բազմաթիվ առավելությունների՝ հեշտ մասշտաբից մինչև տվյալների բազայի ժամանակակից առանձնահատկություններ, ինչպիսիք են գործարքները:

MongoDB-ն աջակցում է նաև օբյեկտների տվյալների մոդելավորման (ODM) գրադարաններին, ինչպիսին է Mongoose-ը: ODM-ները կառավարում են տվյալների փոխհարաբերությունները, վավերացնում են սխեմաները և օբյեկտները վերածում տվյալների մոդելների: Դրանք հեշտացնում են MongoDB տվյալների բազայի հետ փոխգործակցությունը:

Մի քանի քայլով դուք կսովորեք, թե ինչպես օգտագործել MongoDB-ը NestJS հավելվածում՝ նվիրված NestJS mongoose փաթեթով:

Քայլ 1. Կախվածությունների տեղադրում

Նախքան Mongoose-ն օգտագործելը ձեր NestJS հավելվածում, դուք պետք է տեղադրեք այն իր բնիկ NestJS փաթեթի հետ միասին:

Տեղադրեք mongoose-ը և նրա բնիկ NestJS փաթեթը՝ օգտագործելով npm փաթեթների կառավարիչը՝ գործարկելով.

npm install @nestjs/mongoose mongoose

Քայլ 2. Միացում MongoDB-ին

Երբ տեղադրումն ավարտվի, անցեք ձեր app.module.ts ֆայլին: Այնուհետև ներմուծեք MongooseModule @nest/mongoose-ից՝

import { MongooseModule } from '@nestjs/mongoose';

Հաջորդը, ձեր ներմուծման զանգվածում զանգահարեք forRoot մեթոդը MongooseModule-ում և փոխանցեք ձեր MongoDB URI որպես արգումենտ.

imports: [MongooseModule.forRoot(process.env.MONGODB_URI)],

forRoot մեթոդը կիսում է տվյալների բազայի կապը ձեր հավելվածի բոլոր մոդուլների միջոցով: Այն պահանջում է կամընտիր կոնֆիգուրացիայի օբյեկտ; Դուք կարող եք ավելին իմանալ դրա մասին Mongoose-ի ընտրանքների փաստաթղթերում:

Քայլ 3. Mongoose սխեմայի ստեղծում

Սխեման JSON օբյեկտ է, որը սահմանում է ձեր տվյալների կառուցվածքը և բովանդակությունը: Դուք պետք է ստեղծեք մեկը՝ սահմանելու համար, թե ինչպես է Mongoose-ը պահում ձեր տվյալները MongoDB տվյալների բազայում:

Ձեր հավելվածի արմատային մոդուլում ստեղծեք «schemas» թղթապանակ: Այս թղթապանակն այն է, որտեղ դուք կպահեք ձեր բոլոր սխեմայի ֆայլերը:

Ձեր schemas թղթապանակում ստեղծեք սխեմայի ֆայլ և անվանեք այն՝ օգտագործելով NestJS անվանման կոնվենցիան (.schema.ts):

Հաջորդը, ձեր սխեմայի ֆայլին ավելացրեք հետևյալ ներմուծումները.

import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
import { Document } from "mongoose";

Prop դեկորատորը նշում է հատկությունները, որոնք այն նշում է որպես սեփականություն ձեր MongoDB տվյալների բազայում:

Schema դեկորատորը նշում է դասը, որը նշում է որպես սխեմա:

SchemaFactory դասը պարունակում է մոդելի ստեղծման համար օգտագործվող ստատիկ մեթոդներ:

Mongoose Փաստաթուղթը ներկայացնում է MongoDB-ում պահվող փաստաթղթերի մեկ առ մեկ քարտեզագրում: Ձեզ անհրաժեշտ կլինի որպես տիպի անոտացիա:

Այնուհետև ստեղծեք դաս, նշեք այն Schema դեկորատորով, որպեսզի այն նշվի որպես Mongoose սխեմա և արտահանեք այն.

@Schema()
export class Demo {}

Այնուհետև ստեղծեք և արտահանեք միության տեսակ ձեր դասի և Փաստաթղթի հետ՝

export type DemoDocument = Demo & Document;

Այնուհետև ավելացրեք ձեր ուզած հատկությունները դասին և նշեք դրանք Prop դեկորատորով: Դուք կարող եք կամընտիր կազմաձևման օբյեկտ փոխանցել Prop դեկորատորին և սահմանել հատկությունը ըստ պահանջի.

@Schema()
export class Demo {
  @Prop({ required: true })
  property_1: string;
}

Mongoose-ի փաստաթղթերն ավելի մանրամասն են ընդգրկում կազմաձևման օբյեկտը:

Վերջապես, ստեղծեք և արտահանեք Mongoose մոդելը SchemaFactorycreateForClass մեթոդի միջոցով և փոխանցեք ձեր դասը որպես փաստարկ.

export const DemoSchema = SchemaFactory.createForClass(Demo);

Ձեր ավարտված սխեման պետք է այսպիսի տեսք ունենա.

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
 
export type DemoDocument = Demo & Document;
 
@Schema()
export class Demo {
  @Prop({ required: true })
  property_1: string;
 
  @Prop({ required: true })
  property_2: number;
 
  @Prop()
  property_3: string;
 
  @Prop({ required: true })
  property_4: boolean;
}
 
export const DemoSchema = SchemaFactory.createForClass(Demo);

Քայլ 4. Սխեմայի գրանցում

Նավարկեք ձեր մոդուլի թղթապանակը և ավելացրեք հետևյալ ներմուծումները.

import { MongooseModule } from '@nestjs/mongoose';
import { Demo, DemoSchema } from '../schemas/demo.schema';

Հաջորդը, @module դեկորատորի ներսում ստեղծեք «ներմուծում» զանգված: Այնուհետև զանգվածի ներսում զանգահարեք ForFeature մեթոդը MongooseModule-ում:

ForFeature մեթոդը ներառում է Mongoose մոդելների զանգված: Անցեք կազմաձևման օբյեկտ՝ ձեր սխեմայի դասի անվան համար սահմանված name հատկությամբ և ձեր ստեղծված սխեմային սահմանված schema հատկությամբ.

MongooseModule.forFeature([{ name: Demo.name, schema: DemoSchema }]),

Քայլ 5. Mongoose մոդելի ներարկում

Հաջորդը, դուք պետք է ներարկեք Mongoose Model՝ ձեր տվյալների բազայի հարցումը հնարավոր դարձնելու համար՝ մոդելի վրա Mongoose մեթոդներ կանչելով:

Նավարկեք ձեր մոդուլի սպասարկման դասին և ավելացրեք հետևյալ ներմուծումները.

import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
import { Demo, DemoDocument } from '../schemas/demo.schema';

Օգտագործեք Model ինտերֆեյսը որպես տիպի սահմանում ձեր մոդելի համար՝ նրան հասանելի դարձնելով Mongoose մեթոդները:

InjectModel դեկորատորը ներարկում է Mongoose մոդելը ձեր սպասարկման դասի կոնստրուկտորին:

Հաջորդը, ձեր սպասարկման դասի ներսում ստեղծեք կոնստրուկտոր: Որպես արգումենտ այն պետք է ընդունի մասնավոր փոփոխական, Model՝ DemoDocument-ի ընդհանուր տեսակով: Նշեք ձեր անձնական փոփոխականը InjectModel դեկորատորով և փոխանցեք ձեր սխեմայի դասի անունը որպես փաստարկ.

@Injectable()
export class DemoService {
  constructor(
    @InjectModel(Demo.name)
    private demoModel: Model<DemoDocument>,
  ) {}
}

Դուք կարող եք հարցումներ կատարել ձեր MongoDB տվյալների բազայում՝ զանգահարելով Mongoose մեթոդները ձեր մասնավոր փոփոխականի վրա (demoModel):

MongoDB-ի օգտագործման առավելությունները

Բացի իր ուժեղ առցանց համայնքից և օգտագործման հեշտությունից, MongoDB-ն ապահովում է տվյալների բարձր հասանելիություն և կայունություն: Այն առաջարկում է արագացված վերլուծություն, տվյալների համախմբում և ավելին՝ դարձնելով այն իդեալական տվյալների բազա ձեր նախագծերի համար: