在我的用户文档中,我想将电子邮件
和用户名
单独索引为唯一字段,以便永远不会输入重复项。
问题是我找到的多个唯一索引的所有文档都是针对“复合索引”的,它似乎以某种方式将第二个索引与第一个索引联系起来。我不想那样。
我想要的只是在我的注册步骤1中,如果用户提交了一封已经存在的电子邮件,MongoDB会返回一个错误,表明它已经存在,并且步骤2,当他们设置用户名时。
所以我希望它们有索引并且彼此独立。我现在正在使用它,它以某种方式将两者结合在一起,这不是我想要的:
const UserSchema = new mongoose.Schema({
email: {
type: String,
required: true,
trim: true
},
username: {
type: String,
required: false,
trim: true
}
})
UserSchema.index({
email: 1,
username: 1
}, {
unique: true
});
最佳答案
Mongoose 没有针对唯一字段的内置验证。我推荐这个包(通过这个你可以在电子邮件和用户名字段上使用唯一验证器):mongoose-unique-validator。扩展您的代码:
let uniqueValidator = require('mongoose-unique-validator');
email: {
type: String,
required: true,
trim: true,
unique: true,
index: true
},
username: {
type: String,
required: false,
trim: true,
unique: true,
index: true
}
UserSchema.plugin(uniqueValidator, {message: 'is already taken.'});
关于javascript - 如何在 Mongoose 的单个文档中索引多个唯一数据字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51179085/