2012-01-11 58 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

唯一索引意味着沒有其他文檔插入索引中指定的相同值,這不適用於嵌入式文檔。如果您嘗試將[email protected]添加到用戶A和B,則應該由於唯一索引而失敗。

您將不得不在Node.JS中強制執行此操作,而不是嘗試使用唯一索引執行此操作。

+0

我也遇到了這個問題。讓Node.js處理這件事是否安全?在異步保存調用期間不能發生這種情況嗎? – wtjones 2013-02-26 03:42:50

+0

是的,但沒有其他選擇。你可以做一些事情,比如兩步保存以減少機會。但是在一天結束的時候,如果數據庫沒有執行它,你會遇到這個問題。 – 2013-02-27 22:04:03