在 Mongoose 中,你可以使用 @Prop 装饰器存储复杂的数据,例如嵌套对象或嵌套数组。你可以定义复杂数据类型,然后将其用作字段的类型。以下是一些示例:

1. 嵌套对象:

你可以在模式中定义一个嵌套对象类型,然后将其用作字段的类型:

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

@Schema()
export class Address {
  @Prop()
  street: string;

  @Prop()
  city: string;

  @Prop()
  postalCode: string;
}

@Schema()
export class User extends Document {
  @Prop()
  name: string;

  @Prop({ type: Address }) // 使用嵌套对象类型作为字段类型
  address: Address;

  // 其他属性...
}

export const UserSchema = SchemaFactory.createForClass(User);

在上面的示例中,我们定义了一个嵌套的 Address 类型,并将其用作 User 模型的 address 字段的类型。

2. 嵌套数组:

你还可以将嵌套的数组类型用作字段的类型:

@Schema()
export class User extends Document {
  @Prop()
  name: string;

  @Prop([{ type: String }]) // 使用嵌套字符串数组类型作为字段类型
  hobbies: string[];

  // 其他属性...
}

在这个示例中,User 模型的 hobbies 字段是一个包含字符串的数组。

3. 嵌套混合类型:

你可以将嵌套对象和嵌套数组组合在一起,以存储更复杂的数据结构:

@Schema()
export class UserProfile {
  @Prop()
  bio: string;

  @Prop([{ type: String }]) // 嵌套字符串数组
  interests: string[];
}

@Schema()
export class User extends Document {
  @Prop()
  name: string;

  @Prop({ type: UserProfile }) // 嵌套 UserProfile 对象
  profile: UserProfile;

  // 其他属性...
}

在这个示例中,User 模型的 profile 字段是一个嵌套的 UserProfile 对象,其中包含 bio 字符串和 interests 字符串数组。

这些示例演示了如何使用 Mongoose 的 @Prop 装饰器存储复杂的数据类型,你可以根据你的数据结构需求定义适合的嵌套类型。

发表评论