relacionamento 1:n mongose
Luiz Pires
Posted on August 29, 2023
Para criar um relacionamento 1:n (um para muitos) utilizando o Mongoose e o NestJS, você pode seguir os seguintes passos:
- 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);
// 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);
-
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);
- 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
}
// 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.
}
- 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 {}
// 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 {}
- 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.
💖 💪 🙅 🚩
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.