дискриминаторы / single-collection-наследование с помощью nestjs / mongoose

#node.js #mongoose #nestjs

#node.js #мангуст #nestjs

Вопрос:

Проблема

Привет, я пытаюсь создать коллекцию пользователей в mongo with nestjs . Я хочу иметь пару схем, которые будут наследоваться от одной базовой схемы, и иметь базовую службу, которую можно расширить.

Поскольку nestjs/mongoose у меня нет такой функции, я попытался реализовать ее самостоятельно, и основная проблема заключается в том, что уникальный ключ, который я определил, не является уникальным в коллекции

некоторый код

Здесь я определяю две схемы

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

export type UserDocument = User amp; Document;

@Schema()
export class User {
    @Prop({ unique: true, type: 'string' })
    username: string;

    @Prop()
    password: string;

    @Prop()
    created: Date;

    @Prop()
    updated: Date;

    @Prop()
    type: string;

    @Prop()
    name?: string

    // roles: Role[];
}

export const UserSchema = SchemaFactory.createForClass(User);


@Schema()
export class EUser extends User {
    @Prop()
    language: string;
}

export const EUserSchema = SchemaFactory.createForClass(EUser);
export type EUserDocument = EUser amp; Document;

  

Нет, чтобы сохранить их в одну и ту же коллекцию, я настраиваю mongooseModule.forfeature для использования следующее:

 
@Module({
  imports: [MongooseModule.forFeature([
    {
      name: EUser.name, schema: EUserSchema, collection: 'users'
    }
  ])
  ]})
  

Таким образом, он сохраняет все в одну и ту же коллекцию, но не заботится (и даже не создает!) Об уникальном индексе.

Что у меня есть в моей базе данных.

Ответ №1:

Я нашел эту функцию, которая загружает индексы в сервис

 constructor(@InjectModel(User.name) protected UserModel: Model<UserDocument>) {

   this.UserModel.createIndexes()
}
  

Проблема решена 🙂