# Mongo module

## Install @nestgram/mongo and mongoose

```nginx
npm i @nestgram/mongo mongoose
npm i @types/mongoose --save-dev
// or
yarn add @nestgram/mongo mongoose
yarn add @types/mongoose -D
```

## Connect mongoose

{% code title="app.module.ts" %}

```typescript
import { Module } from 'nestgram';
import { UseMongoConnection } from '@nestgram/mongo';

import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  controllers: [AppController],
  services: [AppService],
  modules: [
    UseMongoConnection('uri'), // pass uri here
  ],
})
export class AppModule {}
```

{% endcode %}

## Create schema

{% code title="user.schema.ts" %}

```typescript
import { Schema, Prop, NestSchema } from '@nestgram/mongo';
import { Document } from 'mongoose';

@Schema()
export class User {
  @Prop() email: string; // email field (string type)
  @Prop() name: string;
  @Prop() age: number; // age field (number type)
  @Prop({ type: [Object], default: [] }) articles: any[]; // params for field
}

export type UserDocument = User & Document; // export user document
NestSchema.reg(User); // reg schema
```

{% endcode %}

## Import schema

{% code title="app.module.ts" %}

```typescript
import { Module } from 'nestgram';
import { UseMongoConnection, UseMongo } from '@nestgram/mongo';

import { User } from './user.schema.ts';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  controllers: [AppController],
  services: [AppService],
  modules: [
    UseMongoConnection('uri'), // pass uri here
    UseMongo(User), // pass schemas here that will be passed to your service
  ],
})
export class AppModule {}
```

{% endcode %}

## Get the schema in the service

{% code title="app.service.ts" %}

```typescript
import { Service } from 'nestgram';
import { Model } from 'mongoose';
import { User } from './user.schema.ts';

@Service()
export class AppService {
  constructor(private readonly User: Model<User>) {}
}
```

{% endcode %}

## Then

You can then use the model in service methods and call it in controllers
