2012-01-11 7 views
0

私は、友だち(埋め込みドキュメント)のコレクションを管理しているユーザー(ドキュメント)を持っています。私は特定のユーザーのために、すべてのその友人が一意である(電子メールは一意でなければならない)ことを確認しようとしてきました。しかし、その制約は強制ではなく、私はなぜそれを理解できません。誰もそれを私に助けてくれますか?埋め込みドキュメントのコレクション内の一意性を保証する方法

私はMongo 2.2とMongooseを使用しています。

var FriendSchema = new mongoose.Schema({ 
    email   : { type: String, required: true, lowercase: true, trim: true } 
    , name    : { type: String, trim: true } 
}); 


var UserSchema = new mongoose.Schema({ 
    email   : { type: String, required: true, index: { unique: true }, lowercase: true, trim: true } 
    , friends   : [FriendSchema] 
}); 

UserSchema.index({ 'friend.email': 1 }, { unique: true }); 

答えて

0

一意インデックスとは、インデックスに同じ値が指定された他のドキュメントが挿入されていないことを意味します。埋め込みドキュメントには適用されません。ユーザーAとユーザーBに[email protected]を追加しようとすると、一意のインデックスのために失敗するはずです。

これは一意のインデックスで行うのではなく、Node.JSでこれを強制する必要があります。

+0

私もこの問題に遭遇しました。 Node.jsでこれを処理させるのは安全ですか?非同期セーブコール中に重複が発生しませんでしたか? – wtjones

+0

はい、実際には別のオプションはありません。チャンスを減らすために2段階の節約のようなことをすることができます。しかし、その日の終わりに、DBがそれを実施しない場合、あなたはこの問題にぶつかるでしょう。 –

関連する問題