![](/img/trans.png)
[英]NestJS with mongoose schema, interface and dto approach question
[英]Populate a query in Mongoose with Schema First approach and NestJS
首先,我想說這個問題類似於這一個它引用這一項 。 除了明顯的區別外,我和第二個鏈接有完全相同的問題。 我正在嘗試擴展由NestJS生成的定義屬性的類。
我正在將NestJs與在這里找到的Schema first方法一起使用。 我還基於我的GraphQL模式生成了一個類文件。
這是模式:
type Location {
name: String!
owner: User!
}
生成類:
export class Location {
name: string;
owner: User;
}
現在,我想擴展此類,所以我不必重復數據(還有很多未顯示的字段)。 我還想添加存在於文檔中但不在架構中的字段(在此示例中為_id
)。 這是我的LocationDocument和我的架構。
export interface LocationDocument extends Location, Document {
_id: Types.ObjectId
}
export const LocationSchema: Schema = new Schema(
{
name: {
type: String,
required: true,
},
owner: {
type: Types.ObjectId,
ref: 'User',
}
);
現在這是我的問題。 從GraphQL架構生成的Location
類將owner
屬性定義為User
類型。 但是實際上,在由Mongoose填充之前,它只是一個mongodb id。 因此它可以是Types.ObjectId
或UserDocument
上的User
。 所以我嘗試將其定義為:
export interface LocationDocument extends Location, Document {
_id: Types.ObjectId
owner: User | Types.ObjectId;
}
但這在編譯器中拋出一個錯誤,即LocationDocument錯誤地擴展了Location。 這是有道理的。 有什么方法可以擴展用戶類,但可以說所有者屬性可以是用戶類型(由Mongoose填充)或mongo對象ID(存儲在數據庫中)。
我決定擁有一個可以同時屬於兩種類型的屬性(雖然對Mongoose和JS易於使用)不是一種類型化的方式。 在我的架構中,我有一個所有者,它是一個用戶類型。 在我的數據庫和擴展它的文檔中,我有一個OwnerId。 因此,對於訪問API的人們來說,他們並不關心這種關系的ownerId。 但是在我的解析器中,我使用ID。 一種是Mongo ID類型,另一種是用戶類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.