@tdi-mc/mongo
v0.0.8
Published
TDI MC - Mongo Service
Downloads
44
Readme
Table of Contents
Introduction
This library provides an easy-to-use interface for working with MongoDB in NestJS applications. It is built on top of the popular mongoose
and @typegoose/typegoose
libraries, and provides a set of convenient abstractions for working with these libraries.
Installation
To install this library, use either npm
or yarn
:
npm install -S @tdi-mc/core @tdi-mc/mongo
# or
yarn add -S @tdi-mc/core @tdi-mc/mongo
Getting Started
Configuration
To use this library, you must first provide the necessary configuration. This can be done by creating a config.yml file in your application's root directory, with the following content:
mongo:
host: localhost
port: 27017
user: my_user
password: my_pass
database: my_database
Replace the values with your actual database connection information.
Module
Once you have provided the configuration, you can import the MongoModule
in your AppModule
:
import { CoreModule, Module } from '@tdi-mc/core';
import { MongoModule } from '@tdi-mc/mongo';
@Module({
imports: [CoreModule, MongoModule],
})
export class AppModule {}
Service
You can then use the MongoService to interact with the database:
import { Injectable } from '@tdi-mc/core';
import { MongoService } from '@tdi-mc/mongo';
@Injectable()
export class UserService {
constructor(private readonly mongoService: MongoService) {}
async getUsers() {
const users = await this.mongoService.getModel(UserSchema).findAll();
return users;
}
}
Repository
Define a Model
You can define a model using @tdi-mc/mongo
(based on interface of @typegoose/typegoose
):
import { modelOptions, mongoose, prop } from '@tdi-mc/mongo';
@modelOptions({ schemaOptions: { collection: 'users' } })
export class UserSchema {
@prop({ auto: true, immutable: true })
public _id?: mongoose.Types.ObjectId;
@prop()
firstName: string;
}
Define a Repository
You can create a repository for your model by extending the MongoRepository class and providing the model type as a generic argument:
import { Injectable } from '@tdi-mc/core';
import { MongoRepository } from '@tdi-mc/mongo';
import { UserSchema } from './user.model';
@Injectable()
export class UserRepository extends MongoRepository<UserSchema> {}
Using Repository in Service
You can then use the repository in your service:
import { Injectable } from '@nestjs/common';
import { UserRepository } from './user.repository';
@Injectable()
export class UserService {
constructor(
private readonly userRepository: UserRepository,
) {}
async getUsers() {
const users = await this.userRepository.findAll();
return users;
}
}
Reference
Contributing
Contributions to @tdi-mc/mongo
are welcome. If you would like to contribute, please fork the repository, make your changes, and submit a pull request.
Please make sure to update tests as appropriate.