nestjs-typegoose
Description
Injects typegoose models for nest components and controllers. Typegoose equivalant for @nestjs/mongoose.
Using Typegoose removes the need for having an Model interface.
Installation
npm install --save nestjs-typegoose
Basic usage
app.module.ts
import { Module } from '@nestjs/common';
import { TypegooseModule } from 'nestjs-typegoose';
@Module({
imports: [TypegooseModule.forRoot('mongodb://localhost/nest'), CatsModule],
})
export class ApplicationModule {}
Create class that extends Typegoose
cat.model.ts
import { prop, Typegoose } from 'typegoose';
import { IsString } from 'class-validator';
export class Cat extends Typegoose {
@IsString()
@prop({ required: true })
name: string;
}
Inject Cat for CatsModule
cat.module.ts
import { Module } from '@nestjs/common';
import { TypegooseModule } from 'nestjs-typegoose';
import { Cat } from './cat.model';
import { CatsService } from './cat.service';
@Module({
imports: [TypegooseModule.forFeature(Cat)],
components: [CatsService]
})
export class CatsModule {}
Get the cat model in a service
cats.service.ts
import { Component } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Cat } from './interfaces/cat.interface';
import { CreateCatDto } from './dto/create-cat.dto';
import { CatSchema } from './schemas/cat.schema';
import { ModelType } from 'typegoose';
@Component()
export class CatsService {
constructor(@InjectModel(Cat) private readonly catModel: ModelType<Cat>) {}
async create(createCatDto: {name: string}): Promise<Cat> {
const createdCat = new this.catModel(createCatDto);
return await createdCat.save();
}
async findAll(): Promise<Cat[]> {
return await this.catModel.find().exec();
}
}
Requirements
- Typegoose +5.0.0
- @nestjs/common +4.6.6
- mongoose +5.0.14
License
nestjs-typegoose is MIT licensed.