嘿,我有一个针对具有唯一电子邮件的用户的架构:
@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;
...
}
对于每个组,电子邮件应该是唯一的。这意味着在用户集合中可能有重复的电子邮件,但我猜它们应该按组别命名为唯一复合索引。
我如何在 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;
...
}
关于mongodb - 如何在 NestJS (MongoDB) 中设置唯一复合索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65626559/