iT邦幫忙

0

Mongoose Schema 如何循環引用?

  • 分享至 

  • xImage

我正在嘗試使用 nest.js 和 mongoose 做後端開發。

我有一個 Schema 結構類似如下:

@Schema({ _id: false })
class Chirdren {
  @Prop({ required: true, type: String })
  Name: string;

  @Prop({ type: [SchemaFactory.createForClass(Chirdren)] })
  ChildNodes: [Chirdren];
}

const ChirdrenSchema = SchemaFactory.createForClass(Chirdren);

class Menu {
  @Prop({ required: true })
  Title: string;

  @Prop({
    required: true,
    type: [ChirdrenSchema],
  })
  Contents: [Chirdren];
}

目前這樣 Schema 在 Menu 類的 Contents 有效,但在 Chirdren 底下 ChildNodes 就沒有辦法了。
我希望 ChildNodes 底下結構和 Chirdren 一樣,要怎麼做才能夠循環引用自身 Schema ?又或者有其他的作法?

希望有人能幫忙解答。
感謝~

fillano iT邦超人 1 級 ‧ 2023-03-03 15:44:33 檢舉
https://stackoverflow.com/questions/33825773/recursive-elements-in-schema-mongoose-modelling
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
JamesDoge
iT邦高手 1 級 ‧ 2023-03-03 22:08:15
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

@Schema({ _id: false })
class Children extends Document {
  @Prop({ required: true, type: String })
  Name: string;

  @Prop({
    type: [{ type: SchemaTypes.ObjectId, ref: 'Children' }],
  })
  ChildNodes: Children[];
}

const ChildrenSchema = SchemaFactory.createForClass(Children);

@Schema()
export class Menu extends Document {
  @Prop({ required: true })
  Title: string;

  @Prop({
    required: true,
    type: [{ type: SchemaTypes.ObjectId, ref: 'Children' }],
  })
  Contents: Children[];
}

我要發表回答

立即登入回答