@hymns/mongo-nestjs-utils
v1.0.4
Published
Mongodb NestJS database utilities
Downloads
2
Readme
MongoDB NestJs Utils
Description
It's a MongoDB database model utilities for Nest.js framework.
Installation
$ npm install --save @hymns/mongo-nestjs-utils
Quick Start
Update and extend your application entity class. Here we are using "todo" as application: ./src/todo/entities/todo.entity.ts
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { AbstractDocument } from '@hymns/mongo-nestjs-utils';
@Schema({ versionKey: false })
export class TodoDocument extends AbstractDocument {
@Prop()
title: string;
@Prop()
isComplete: boolean;
...
}
export const TodoEntity = SchemaFactory.createForClass(TodoDocument);
Create new file for your application repository ./src/todo/todo.repository.ts
import { Injectable, Logger } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { AbstractRepository } from '@hymns/mongo-nestjs-utils';
import { TodoDocument } from './entities/todo.entity';
@Injectable()
export class TodoRepository extends AbstractRepository<TodoDocument> {
protected readonly logger = new Logger(TodoRepository.name);
constructor(
@InjectModel(TodoDocument.name)
todoModel: Model<TodoDocument>,
) {
super(todoModel);
}
}
Now you can use the repository with CRUD example on your application service.
./src/todo/todo.service.ts
import { Inject, Injectable } from '@nestjs/common';
import { CreateTodoDto } from './dto/create-todo.dto';
import { UpdateTodoDto } from './dto/update-todo.dto';
import { TodoRepository } from './todo.repository';
@Injectable()
export class TodoService {
constructor(
private readonly todoRepository: TodoRepository,
) {}
async create(createTodoDto: CreateTodoDto) {
return this.todoRepository.create(createTodoDto);
}
async findAll() {
return this.todoRepository.find({});
}
async findOne(_id: string) {
return this.todoRepository.findOne({ _id });
}
async update(_id: string, updateTodoDto: UpdateTodoDto) {
return this.todoRepository.findOneAndUpdate(
{ _id },
{ $set: updateTodoDto },
);
}
async remove(_id: string) {
return this.todoRepository.findOneAndDelete({ _id });
}
}
Lastly register the DatabaseModule
in your application module: ./src/todo/app.module.ts
import { Module } from '@nestjs/common';
import { DatabaseModule } from '@hymns/mongo-nestjs-utils';
...
import { TodoService } from './todo.service';
import { TodoRepository } from './todo.repository';
import { TodoDocument, TodoEntity } from './entities/todo.entity';
@Module({
imports: [
DatabaseModule,
DatabaseModule.forFeature([
{ name: TodoDocument.name, schema: TodoEntity },
])
...
],
providers: [TodoService, TodoRepository],
...
})
export class AppModule {}
Make sure add the MongoDB connection URL inside your .env
file MONGODB_URL=mongodb://mongo:27017/todos