👈 En esta lectura está la solución de como lograr las relaciones embebidas incluyendo el tipado.
Introducción
¿Ya tomaste el Curso de NestJS: Programación Modular?
Instalación de Docker para este curso
Instalación de Platzi Store y presentación
Database
Configuración de Docker para MongoDB
Exploración de la base de datos con Mongo Compass
Instalando y conectando MongoDB Driver
Conexión como inyectable
Ejecutando un query
Usando variables de ambiente en Mongo
Mongoose
¿Qué es Mongoose? Instalación y configuración
Implementando Mongoose en Módulos
Conectando Mongo a los servicios
Create, update y delete
Pipe para mongoid
Agregando paginación
Agregando un filtro de rango para precios
Agregando indexadores
Relaciones en MongoDB
Relaciones uno a uno embebidas
Relaciones uno a uno referenciadas
Relaciones uno a muchos embebidas
Cómo tipar relaciones uno a muchos embebidas
Relaciones uno a muchos referenciadas
Manipulación de arrays en MongoDB
Próximos pasos
Continúa con el Curso de NestJS: Autenticación con Passport y JWT
Nicolas Molina
Lectura
En las relaciones embebidas usamos las siguientes dos formas:
...
Regístrate o inicia sesión para leer el resto del contenido.
Aportes 3
Preguntas 4
👈 En esta lectura está la solución de como lograr las relaciones embebidas incluyendo el tipado.
Para que Swagger se muestre correctamente se debe agregar:
@ApiProperty({ type: () => [CreateSubDocDto]})
readonly subDocs: CreateSubDocDto[];
De igual manera me parece que los tipos de las propiedades deben ser string en lugar de String, sino Swagger los muestra como objetos.
readonly description: string;
Les dejo el codigo para la solucion de la clase anterior:
// src/users/entities/skills.entity.ts
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
@Schema()
export class Skill {
@Prop()
name: string;
@Prop()
color: string;
}
export const SkillSchema = SchemaFactory.createForClass(Skill);
// src/users/dtos/skills.dto.ts
import { IsNotEmpty, IsString } from 'class-validator';
import { PartialType } from '@nestjs/swagger';
export class CreateSkillDto {
@IsString()
@IsNotEmpty()
readonly name: string;
@IsString()
@IsNotEmpty()
readonly color: string;
}
export class UpdateSkillDto extends PartialType(CreateSkillDto) {}
Implementacion en el dto de customers
import { CreateSkillDto } from './skills.dto';
export class CreateCustomerDto {
...
@IsArray()
@IsNotEmpty()
@ValidateNested({ each: true })
@Type(() => CreateSkillDto)
readonly skills: CreateSkillDto[];
}
y en la entidad de customers
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document, Types } from 'mongoose';
import { Skill, SkillSchema } from './skills.entity';
@Schema()
export class Customer extends Document {
@Prop({ required: true, type: String })
name: string;
@Prop({ required: true, type: String })
email: string;
@Prop({
type: [SkillSchema],
})
skills: Types.Array<Skill>;
}
export const CustomerSchema = SchemaFactory.createForClass(Customer);
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?