MongoDB is een NoSQL-database zonder schema met flexibele documentstructuren, in tegenstelling tot SQL-databases. Het gebruik van MongoDB als database biedt veel voordelen, van eenvoudig schalen tot moderne databasefuncties zoals transacties.

MongoDB ondersteunt ook ODM-bibliotheken (Object Data Modeling) zoals Mongoose. ODM's beheren gegevensrelaties, valideren schema's en zetten objecten om in gegevensmodellen. Ze maken het gemakkelijker om te communiceren met een MongoDB-database.

In een paar stappen leer je hoe je MongoDB gebruikt in een NestJS-applicatie met het speciale NestJS-mongoose-pakket.

Stap 1: Afhankelijkheden installeren

Voordat u Mongoose in uw NestJS-app gebruikt, moet u deze samen met het oorspronkelijke NestJS-pakket installeren.

Installeer mangoest en zijn native NestJS-pakket met behulp van de npm-pakketbeheerder door rennen:

npm installeren @nestjs/mangoeste mangoest

Stap 2: Verbinding maken met MongoDB

Wanneer de installatie is voltooid, navigeert u naar uw app.module.ts het dossier. Importeer vervolgens MongooseModule van @nest/mangoest:

importeren { MongooseModule } van '@nestjs/mangoest';

Roep vervolgens in uw importarray de. aan voorRoot methode aan MongooseModule en geef uw MongoDB URI door als argument:

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

De voorRoot method deelt de databaseverbinding via alle modules in uw toepassing. Er is een optioneel configuratieobject voor nodig; je kunt er meer over leren in Mongoose's opties documentatie.

Stap 3: Een mangoestschema maken

Een schema is een JSON-object dat de structuur en inhoud van uw gegevens definieert. U moet er een maken om te definiëren hoe Mongoose uw gegevens opslaat in de MongoDB-database.

Maak in de hoofdmodule van uw toepassing een "schema's” map. In deze map bewaart u al uw schemabestanden.

In je schema's map, maak een schemabestand en geef het een naam met behulp van de NestJS-naamgevingsconventie (.schema.ts).

Voeg vervolgens de volgende importen toe aan uw schemabestand:

importeren { Prop, Schema, SchemaFactory } van "@nestjs/mangoest";
importeren { Document } van "mangoest";

De Prop decorateur markeert eigenschappen die het annoteert als een eigenschap in uw MongoDB-database.

De Schema decorateur markeert de klasse die het annoteert als een schema.

De Schemafabriek class bevat statische methoden die worden gebruikt voor het maken van modellen.

De mangoest Document vertegenwoordigt een één-op-één toewijzing aan documenten zoals opgeslagen in MongoDB. Je hebt het nodig als typeannotatie.

Dan, maak een klas, annoteer het met de Schema decorateur om het te markeren als een Mongoose-schema en het te exporteren:

@Schema()
exporterenklasDemo{}

Maak en exporteer vervolgens een unietype met je klas en Document:

exporterentype DemoDocument = Demo & Document;

Voeg vervolgens de gewenste eigenschappen toe aan de klasse en annoteer ze met de Prop decorateur. U kunt een optioneel configuratieobject doorgeven aan de Prop decorateur en stel de eigenschap naar wens in:

@Schema()
exporterenklasDemo{
@Prop({ verplicht: WAAR })
eigenschap_1: tekenreeks;
}

De Mangoest documentatie behandelt het configuratieobject in meer detail.

Maak en exporteer ten slotte een Mongoose-model via de Schemafabriek's createForClass methode en geef je klasse door als argument:

exporterenconst DemoSchema = SchemaFactory.createForClass (demo);

Uw voltooide schema zou er als volgt uit moeten zien:

importeren { Prop, Schema, SchemaFactory } van '@nestjs/mangoest';
importeren { Document } van 'mangoest';

exporterentype DemoDocument = Demo & Document;

@Schema()
exporterenklasDemo{
@Prop({ verplicht: WAAR })
eigenschap_1: tekenreeks;

@Prop({ verplicht: WAAR })
eigenschap_2: nummer;

@Prop()
eigenschap_3: tekenreeks;

@Prop({ verplicht: WAAR })
eigenschap_4: booleaans;
}

exporterenconst DemoSchema = SchemaFactory.createForClass (demo);

Stap 4: Het schema registreren

Navigeer naar de map van uw module en voeg de volgende imports toe:

importeren { MongooseModule } van '@nestjs/mangoest';
importeren { Demo, Demoschema } van '../schema's/demo.schema';

Maak vervolgens een "importeert” array binnen de @module decorateur. Roep vervolgens binnen de array de. aan voor Functie methode aan MongooseModule.

De voor Functie methode omvat een reeks Mongoose-modellen. Geef een configuratieobject door met a naam eigenschap ingesteld op de naam van uw schemaklasse, en a schema eigenschap ingesteld op uw gemaakte schema:

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

Stap 5: Het mangoestmodel injecteren

Vervolgens moet u het Mongoose-model injecteren om het opvragen van uw database mogelijk te maken door Mongoose-methoden op het model aan te roepen.

Navigeer naar de serviceklasse van uw module en voeg de volgende importen toe:

importeren {Model} van 'mangoest';
importeren { InjectModel } van '@nestjs/mangoest';
importeren { Demo, DemoDocument } van '../schema's/demo.schema';

Gebruik de Model interface als een typedefinitie voor uw model, waardoor het toegang krijgt tot Mongoose-methoden.

De InjecterenModel decorateur injecteert het Mongoose-model in de constructor van uw serviceklasse.

Maak vervolgens een constructeur binnen uw serviceklasse. Het zou een moeten duren privaat variabele als argument, a Model met een generiek type Demodocument. Annoteer uw privévariabele met de InjecterenModel decorateur en geef de naam van uw schemaklasse door als argument:

@Injectable()
exporterenklasDemoservice{
constructeur(
@InjectModel(Demo.naam)
privé demoModel: Model<Demodocument>,
) {}
}

U kunt uw MongoDB-database opvragen door Mongoose-methoden aan te roepen op uw privévariabele (demoModel).

Voordelen van het gebruik van MongoDB

Naast de sterke online community en het gebruiksgemak, biedt MongoDB een hoge beschikbaarheid en stabiliteit van gegevens. Het biedt versnelde analyse, gegevensaggregatie en meer, waardoor het de ideale database is voor uw projecten.