【问题标题】:How to set up Unique Compound Index in NestJS (MongoDB)如何在 NestJS (MongoDB) 中设置唯一复合索引
【发布时间】:2021-04-14 00:24:19
【问题描述】:

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

@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 Compound Index

如何在 NestJS 中进行设置?

【问题讨论】:

    标签: mongodb mongoose unique nestjs


    【解决方案1】:

    看起来不可能仅仅通过使用@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;
    
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-24
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多