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

标签 mongodb mongoose unique nestjs

嘿,我有一个针对具有唯一电子邮件的用户的架构:

@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/

相关文章:

node.js - 不在特定时间段内聚合数据

mongodb - 为什么查询扫描它找到的文档的 8 倍 - MongoDB

node.js - mongoose.connection.collections.collection.drop() 每隔一段时间就会抛出错误

angularjs - MongoDB 未通过 Mongoose 发布任何数据

arrays - mongodb通过多个数组项查找

javascript - 使用 mongoose populate 过滤数据

javascript - 无法遍历数组并保存到 Mongoose 。回调问题?

python - 从 Python 列表中获取前 n 个唯一元素

unique - 泰坦根据属性键制作唯一顶点

javascript - 我想生成唯一 ID