@hymns/mongo-nestjs-utils
Version:
Mongodb NestJS database utilities
126 lines (96 loc) • 3.37 kB
Markdown
# MongoDB NestJs Utils
[](https://www.npmjs.com/package/@hymns/mongo-nestjs-utils)
[](https://npmcharts.com/compare/@hymns/mongo-nestjs-utils?minimal=true)
## Description
It's a [MongoDB](https://www.mongodb.com) database model utilities for [Nest.js](https://github.com/nestjs/nest) framework.
## Installation
```bash
$ npm install --save /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`
```typescript
import { Prop, Schema, SchemaFactory } from '/mongoose';
import { AbstractDocument } from '/mongo-nestjs-utils';
({ versionKey: false })
export class TodoDocument extends AbstractDocument {
()
title: string;
()
isComplete: boolean;
...
}
export const TodoEntity = SchemaFactory.createForClass(TodoDocument);
```
Create new file for your application repository `./src/todo/todo.repository.ts`
```typescript
import { Injectable, Logger } from '/common';
import { InjectModel } from '/mongoose';
import { Model } from 'mongoose';
import { AbstractRepository } from '/mongo-nestjs-utils';
import { TodoDocument } from './entities/todo.entity';
()
export class TodoRepository extends AbstractRepository<TodoDocument> {
protected readonly logger = new Logger(TodoRepository.name);
constructor(
(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`
```typescript
import { Inject, Injectable } from '/common';
import { CreateTodoDto } from './dto/create-todo.dto';
import { UpdateTodoDto } from './dto/update-todo.dto';
import { TodoRepository } from './todo.repository';
()
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`
```typescript
import { Module } from '/common';
import { DatabaseModule } from '/mongo-nestjs-utils';
...
import { TodoService } from './todo.service';
import { TodoRepository } from './todo.repository';
import { TodoDocument, TodoEntity } from './entities/todo.entity';
({
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`