2011-12-31 8 views
1

Мы изучаем Mongo для нового веб-сайта, и мы хотим, чтобы ни один из двух пользователей не подписался с тем же адресом электронной почты, поэтому необходим уникальный индекс в поле электронной почты.В Монго есть уникальные индексы, поддерживаемые для оштукатуренных сред?

Поддерживается ли это в оштукатуренной среде Монго? В документации Mongo указаны уникальные индексы, но не упоминается о черепах.

http://www.mongodb.org/display/DOCS/Indexes#Indexes-UniqueIndexes

ответ

5

Из документации:

Вы можете использовать опцию {unique: true}, чтобы убедиться, что лежащий в основе индекса уникальности навязывает так долго, как уникальный индекс является префиксом клавиши осколка. (примечание: до версии 2.0 это работало, только если коллекция пуста).

http://www.mongodb.org/display/DOCS/Configuring+Sharding

Это имеет интуитивный смысл, так как MongoDB не имеет возможности проверить уникальность через осколками, если ключ осколок не дает такие гарантии кросс-осколок уникальность «бесплатно».

+0

Не уверен, что я полностью понимаю. Мне просто нужно сделать поле электронной почты частью ключа осколка? Что, если мой ключ осколка - 'lastname: 1, email: 1', как я могу обеспечить, чтобы уникальность выполнялась только на' email', а не 'lastname'? – user646584

+1

Если вы сделаете это так, mongo сможет заверить, что последнее имя было уникальным, но не электронной почтой. Если ваш ключ осколка был отменен, то уникальность электронной почты может быть гарантирована. Уникальный индекс должен быть префиксом ключа осколка, а не только подмножества. –

0

Мы

if($exists = $mongo_UserCollection->findOne($desiredEmail)) 
{ 
    throw new User_Exception('Email address in use.'); 
}