Ссылки против встраивания в MongoDB

Я пытаюсь выяснить, как лучше всего использовать MongoDB для очень маленького и простого варианта использования, но нахожу документы несколько запутанными. Мой документ должен отражать тот факт, что у пользователя может быть много писем. Если я следую документации, самое очевидное и простое решение - использовать встраивание. Проблема в том, что когда я хочу проверить адрес электронной почты на уникальность, что AFAIK невозможно с встраиваниями (конечно, я могу использовать карту / уменьшить, но это кажется очень плохим выбором).

Я определенно чувствую, что электронные письма не заслуживают своей собственной коллекции, но, очевидно, встроенный объект не позволяет мне выполнить проверку (и если это произойдет, я действительно не верю, что она будет эффективной). Как бы вы разработали схему в этой ситуации?

1 ответ

Решение

Вы можете определить индекс в подполе электронной почты с установленным { unique: true }. Это предотвратит сохранение нескольких копий адреса электронной почты в коллекции.

Например, скажем, ваши документы выглядят примерно так:

db.users.findOne() => 
{ 
  "name" : "xxxx", 
  "emails" : [ 
     { address: "one@domain.com", validated: false },
     { address: "two@domain.com", validated: true }
  ]
}

Вы можете определить уникальный индекс в поле email.address следующим образом:

db.users.ensureIndex(['emails.address',1], {unique: true})

Теперь вы получите сообщение об ошибке, если попытаетесь ввести один и тот же адрес электронной почты дважды. Это также поможет вам оптимизировать поиск пользователей по их электронным адресам, которые в определенный момент будут полезны в вашем приложении.

Другие вопросы по тегам