Cuando uso una matriz anidada de objetos en el decorador de accesorios:
@Schema() export class Child { @Prop() name: string; } @Schema() export class Parent { @Prop({type: [Child], _id: false}) // don't need `_id` for nested objects children: Child[]; } export const ParentSchema = SchemaFactory.createForClass(Parent);me sale un error:
TypeError: Invalid schema configuration: `Child` is not a valid type within the array `children`. ¿Cómo puedo solucionar esto si necesito usar @Prop({_id: false}) (para mantener el esquema anidado independiente)?
Si cambiamos un decorador de accesorios a @Prop([Child]) funciona, sin embargo, debemos deshabilitar _id para objetos anidados con:
@Schema({_id: false}) export class Child { @Prop() name: string; } @Schema() export class Parent { @Prop([Child]) children: Child[]; }Y en este caso no tendremos un objeto Child genérico y no los usaremos como un esquema independiente.
Otra forma es crear un esquema secundario y usarlo en Child @Prop({type: [childSchema], _id: false}) , pero eso parece una sobrecarga.
un ejemplo rápido que describe su caso es:
import { Document, Schema as MongooseSchema } from 'mongoose'; import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; class GuildMember { @Prop({ type: String, required: true, lowercase: true }) _id: string; @Prop({ required: true }) id: number; @Prop({ required: true }) rank: number; } @Schema({ timestamps: true }) export class Guild extends Document { @Prop({ type: String, required: true, lowercase: true }) _id: string; @Prop({ type: MongooseSchema.Types.Array}) members: GuildMember[] } export const GuildsSchema = SchemaFactory.createForClass(Guild);porque en el esquema anidado no tiene que definir el tipo DENTRO del decorador de accesorios, sino que solo indica que este campo es una matriz y valida el tipo usando TypeScript