Я делаю сбор данных пользователя. Это будет довольно простой, состоящий из электронной почты пользователя, пароля пользователя (хэша) и массива строк.Как сделать электронную почту пользователя уникальной в mongoDB?
{
email: '[email protected]',
password: 'password hash',
arr: []
}
Я хочу, чтобы убедиться, что не может быть две вставки с одной и той же email
. Я читал, что _id
mongoDB по умолчанию уникален, и для повышения производительности он использует специальную структуру данных.
Как я могу убедиться, что email
остается уникальным, и, если возможно, я могу воспользоваться преимуществами производительности, предоставляемыми полем _id
?
Редактировать: Я также хочу удостовериться, что нет null
значений для email
и что нет документов, которые не содержат поля email
.
Я пробовал делать 'db.collection.ensureIndex ({email: 'text'}, {unique: true});' Но он принимает несколько вхождений '{email: null, password: 'passhash', arr: []} ', а также mutliple вхождения' {pass: 'passhash', arr: []} ' Я хочу убедиться, что нет нулевых значений, а также отсутствующих полей. Как я могу это сделать? – Ishan
Создавая уникальный индекс и вставляя документ без электронной почты, вы достигнете этого. Это уродливое решение, но уникальные индексы (без разреженной опции) принимают только одно значение для поля, поэтому, если вы уже вставили документ с {email: null} или {email: ""} (которые являются разными значениями), все вставки без адрес электронной почты будет терпеть неудачу, поскольку они считаются {email: null}. Вы также можете просмотреть эти случаи в прикладном уровне. – LinJuuichi
Кроме того, вы действительно должны контролировать ввод в своем приложении. Если вам нужен адрес электронной почты, было бы намного быстрее проверить его в своем приложении и поймать его там, если это не так. Не полагайтесь на базу данных, чтобы сделать это за вас. –