Заполните запрос в Mongoose с помощью подхода Schema First и NestJS - PullRequest
1 голос
/ 02 июля 2019

Прежде всего, я хочу сказать, что этот вопрос похож на этот , который ссылается на этот .У меня точно такой же вопрос, как и во второй ссылке, за исключением заметной разницы.Я пытаюсь расширить класс, сгенерированный NestJS, который определяет свойство.

Я использую NestJ с первым подходом схемы, найденным здесь .Я также создаю файл классов на основе моей схемы 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',
    }
);

Теперь вот моя проблема.Сгенерированный класс Location из схемы GraphQL определяет свойство owner как тип User.Но на самом деле это просто идентификатор mongodb, пока он не будет заполнен Mongoose.Так что это может быть Types.ObjectId или User на UserDocument.Поэтому я попытался определить его как:

export interface LocationDocument extends Location, Document {
  _id: Types.ObjectId
  owner: User | Types.ObjectId;
}

Но это приводит к ошибке в компиляторе, что LocationDocument неправильно расширяет Location.Это имеет смысл.Есть ли способ расширить класс пользователя, но сказать, что свойство владельца может быть типом пользователя (когда-то заполненным Mongoose) или идентификатором объекта Монго (как хранится в базе данных).

1 Ответ

0 голосов
/ 17 июля 2019

Я решил, что наличие свойства, которое может быть обоих типов, хотя и простое для Mongoose и JS, не является типизированным способом.В моей схеме у меня есть владелец, который является типом пользователя.В моей базе данных и в документе, который ее расширяет, у меня есть OwnerId.Таким образом, люди, получающие доступ к API, не заботятся о владельце для отношений.Но в моем преобразователе я использую Id.Один тип идентификатора Mongo, другой тип пользователя.

...