relacionamento 1:n mongose

ranzinza

Luiz Pires

Posted on August 29, 2023

relacionamento 1:n mongose

Para criar um relacionamento 1:n (um para muitos) utilizando o Mongoose e o NestJS, você pode seguir os seguintes passos:

  1. Defina os Modelos: Comece definindo os modelos para as entidades envolvidas no relacionamento.
// post.model.ts
import { Schema, Prop, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

@Schema()
export class Post extends Document {
  @Prop()
  title: string;

  @Prop()
  content: string;
}

export const PostSchema = SchemaFactory.createForClass(Post);
Enter fullscreen mode Exit fullscreen mode
// comment.model.ts
import { Schema, Prop, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

@Schema()
export class Comment extends Document {
  @Prop()
  text: string;
}

export const CommentSchema = SchemaFactory.createForClass(Comment);
Enter fullscreen mode Exit fullscreen mode
  1. Defina as Relações: No modelo Post, você pode criar um campo que armazene um array de IDs de comentários para representar a relação 1:n.
// post.model.ts
import { Schema, Prop, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
import { Comment } from './comment.model';

@Schema()
export class Post extends Document {
  @Prop()
  title: string;

  @Prop()
  content: string;

  @Prop({ type: [{ type: Schema.Types.ObjectId, ref: 'Comment' }] })
  comments: Comment[];
}

export const PostSchema = SchemaFactory.createForClass(Post);
Enter fullscreen mode Exit fullscreen mode
  1. Crie os Serviços: Agora, você precisa criar os serviços para interagir com os modelos.
// post.service.ts
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { Post } from './post.model';

@Injectable()
export class PostService {
  constructor(@InjectModel(Post.name) private postModel: Model<Post>) {}

  async findAll(): Promise<Post[]> {
    return this.postModel.find().populate('comments').exec();
  }

  // ... outros métodos
}
Enter fullscreen mode Exit fullscreen mode
// comment.service.ts
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { Comment } from './comment.model';

@Injectable()
export class CommentService {
  constructor(@InjectModel(Comment.name) private commentModel: Model<Comment>) {}

  // ... métodos para criar comentários, etc.
}
Enter fullscreen mode Exit fullscreen mode
  1. Configure os Módulos: Configure os módulos no NestJS para que eles possam ser injetados onde necessário.
// post.module.ts
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { PostService } from './post.service';
import { Post, PostSchema } from './post.model';

@Module({
  imports: [MongooseModule.forFeature([{ name: Post.name, schema: PostSchema }])],
  providers: [PostService],
  exports: [PostService],
})
export class PostModule {}
Enter fullscreen mode Exit fullscreen mode
// comment.module.ts
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { CommentService } from './comment.service';
import { Comment, CommentSchema } from './comment.model';

@Module({
  imports: [MongooseModule.forFeature([{ name: Comment.name, schema: CommentSchema }])],
  providers: [CommentService],
  exports: [CommentService],
})
export class CommentModule {}
Enter fullscreen mode Exit fullscreen mode
  1. Utilize os Serviços: Agora você pode utilizar os serviços para criar, listar e manipular posts e comentários.

Lembrando que este é um exemplo básico de como criar um relacionamento 1:n entre posts e comentários usando Mongoose e NestJS. Dependendo das suas necessidades, você pode precisar adicionar mais funcionalidades e validações aos seus serviços e controladores.

💖 💪 🙅 🚩
ranzinza
Luiz Pires

Posted on August 29, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

What was your win this week?
weeklyretro What was your win this week?

November 29, 2024

Where GitOps Meets ClickOps
devops Where GitOps Meets ClickOps

November 29, 2024