javascript - 如何在 Mongoose 的单个文档中索引多个唯一数据字段?
问题描述
在我的用户文档中,我想单独索引email
并username
作为唯一字段,以便永远不会输入重复项。
问题是我为多个唯一索引找到的所有文档都是针对“复合索引”的,它似乎以某种方式将第二个索引与第一个索引联系起来。我不想要那个。
我想要的只是在我的注册步骤 1中,如果用户提交了一封已经存在的电子邮件,以便 MongoDB 返回一个它已经存在的错误,并且与步骤 2完全相同 ,当他们设置他们的用户名时。
所以我希望它们被索引并且彼此独立。我现在正在使用它,它以某种方式将 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.'});
推荐阅读
- python - 当 Pandas DataFrame 中的某个值在另一列中实现时,如何编辑一列中的值?
- python - View 没有返回 HttpResponse 对象。它返回 None 代替。当与 FormView 一起使用正常形式时,django
- java - 属性名称中的 JBoss CLI 特殊字符
- python - 将数据发送到烧瓶而不重新加载页面
- c++ - c++ 项目中令人困惑的定义指令
- java - 休眠搜索将一个实体索引到两个不同的索引
- selenium - Selenium 未通过代理加载页面,显示构建信息:版本:'未知',修订:'未知',时间:'未知'
- c++ - 结构化绑定初始化程序表单 { assignment-expression } 在 clang 上的数组类型失败
- python - 如果 Pandas 数据框中的两个布尔值为真,如何替换元素
- webpack - 运行 webpack encore 时出现语法错误