簡體   English   中英

使用Schema First方法和NestJS在Mongoose中填充查詢

[英]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.ObjectIdUserDocument上的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM