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

6

嘿,我有一个用户模式,其中包含唯一电子邮件:

@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中设置这个?

1个回答

18

看起来仅使用@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;

    ...
}

我想知道是否有一种方法可以添加自定义消息,就像我的示例中所示:UserSchema.index({groupId: 1, firstName: 1}, {unique: true, message: "用户重复错误"}); - buryo
@buryo 你可以尝试以下方法: https://dev59.com/hL7pa4cB1Zd3GeqP9PHN - Radmehr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接