Пользовательская коллекция будет иметь такую структуру, как правило:
user:
_id
fullname
username
email
phone
etc.
Хранение регистрационных данных отдельно из пользовательских данных поможет управлять данными на основе их функциональности. Итак, введите поле, которое указано c для регистрации. Документ пользователя может иметь поле registration
, имеющее следующую форму:
registration: { email: "myname@mymail.com" }
-or-
registration: { phone: "999-888-1234" }
Это позволит регистрационному телефону или электронной почте быть уникальными. Вы можете создать уникальный индекс двух полей отдельно. Для этого используйте частичное индексирование . Например:
db.user.createIndex(
{ "registration.email": 1 },
{ unique: true, partialFilterExpression: { "registration.email": { $exists: true } } }
)
db.user.createIndex(
{ "registration.phone": 1 },
{ unique: true, partialFilterExpression: { "registration.phone": { $exists: true } } }
)
Это также может означать дублирование некоторых данных, таких как телефон или электронная почта. Приложение должно обрабатывать его в зависимости от функциональности.
Возможные варианты:
- Используйте доступный зарегистрированный телефон или адрес электронной почты (и зарегистрированный адрес электронной почты или телефон изменить нельзя).
- Имейте поля телефона и электронной почты пользователя отдельно от зарегистрированного телефона или электронной почты (вопрос, который нужно задать: «Что если пользователь захочет изменить электронную почту или телефон пользователя?»).