在 NestJS 嵌套模式中忽略 @Prop 和 mongoose 选项

Posted

技术标签:

【中文标题】在 NestJS 嵌套模式中忽略 @Prop 和 mongoose 选项【英文标题】:@Prop and mongoose options is ignored in NestJS Nested Schema 【发布时间】:2021-10-15 01:30:45 【问题描述】:

我正在尝试构建一个包含嵌套对象的架构。我想在嵌套对象中设置默认值和必需值,但选项将被忽略。

task.entity.ts

@Schema()
export class Task 
    @Prop( required: true ) // Is working
    language: Language

    @Prop( type: TaskContent, required: true )
    content: TaskContent


class TaskContent extends Document 
    @Prop( required: true, default: "Hello World" ) // This prop is ignored.
    message: string


export type TaskDocument = Task & Document
export const TaskSchema = SchemaFactory.createForClass(Task)

在我的task.service.ts中:

const task = new this.taskSchema(
...dataFromPostRequest
)
const result = await task.save()
return result

如何插入对象并使用嵌套对象中的@Prop?我不想把它放在一个班级里。我想拆分内容。

【问题讨论】:

【参考方案1】:

您需要构建一个 Schema 并将其用作类型:

@Schema()
export class Task 
    @Prop( required: true )
    language: Language
 
    @Prop( type: TaskContentSchema, required: true ) // Here
    content: TaskContent

 
class TaskContent extends Document 
    @Prop( required: true, default: "Hello World" )
    message: string

 
const TaskContentSchema = SchemaFactory.createForClass(TaskContent) // Here
 
export type TaskDocument = Task & Document
export const TaskSchema = SchemaFactory.createForClass(Task)
 

【讨论】:

以上是关于在 NestJS 嵌套模式中忽略 @Prop 和 mongoose 选项的主要内容,如果未能解决你的问题,请参考以下文章

mongoose @prop() 装饰器类型:模式定义中的对象_NestJS

如何在@nestjs/mongoose 模式中设置枚举

如何使用 NestJS 命名法为猫鼬写下嵌套模式 [关闭]

NestJS + Typeorm + Graphql:嵌套关系中 DTO 的正确设计模式

如何在nestjs mongoose typescript中引用嵌套文档

NestJS MongoDB 嵌套对象模式