如何在NestJS(MongoDB)中设置唯一的复合索引

如何在NestJS(MongoDB)中设置唯一的复合索引,mongodb,mongoose,unique,nestjs,Mongodb,Mongoose,Unique,Nestjs,嘿,我有一个独特的电子邮件用户模式: @Schema() export class User { @Prop() firstName!: string; @Prop() lastName!: string; @Prop({ unique: true, }) email!: string; @Prop({ nullable: true }) password?: string; } 但是现在我想扩展这个

嘿,我有一个独特的电子邮件用户模式:

@Schema()
export class User {
    @Prop()
    firstName!: string;

    @Prop()
    lastName!: string;

    @Prop({
        unique: true,
    })
    email!: string;

    @Prop({ nullable: true })
    password?: string;
}
但是现在我想扩展这个。我想要有自己用户的群组。我将创建一个组集合,并将其id添加到用户中,如:

@Schema()
export class User {
    @Prop()
    groupId: string;

    @Prop()
    firstName!: string;

    ...
}
对于每个组,电子邮件应该是唯一的。这意味着在用户集合中可能会有重复的电子邮件,但它们应该是唯一的,按组命名为unique component Index


如何在NestJS中设置此功能?

看起来不可能仅使用
@NestJS/mongoose
装饰器来实现此功能,但是可以使用
SchemaFactory

@Schema()
export class User {
    @Prop()
    groupId: string;

    @Prop()
    firstName!: string;

    ...
}

export const UserSchema = SchemaFactory.createForClass(User);

UserSchema.index({ groupId: 1, firstName: 1 }, { unique: true });

然后必须执行创建迁移以创建此索引,或者启用自动索引功能

@Schema({
  autoIndex: true, // <--
})
export class User {
    @Prop()
    groupId: string;

    @Prop()
    firstName!: string;

    ...
}
@Schema({
自动索引:正确//