2011-12-31 18 views
1

新しいウェブサイトのためにMongoを探しています.2人のユーザーが同じメールアドレスに登録しないようにしたいので、メールフィールドの一意のインデックスが必要です。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'の場合、どうすれば一意性が' lastname'ではなく 'email'だけに強制されますか? – user646584

+1

こうすれば、mongoは姓が電子メールではなく、固有であることを保証することができます。あなたのシャードキーが元に戻った場合、電子メールの一意性が保証されます。ユニークインデックスは、サブセットだけでなく、シャードキーのプレフィックスである必要があります。 –

0

私たちは、私は完全に理解してわからない

if($exists = $mongo_UserCollection->findOne($desiredEmail)) 
{ 
    throw new User_Exception('Email address in use.'); 
} 
関連する問題