2012-12-17 82 views
2

範圍的嵌入文檔的唯一我在貓鼬以下模式:驗證其母公司在貓鼬

UserSchema = new Schema 
    username: {type: String, required: true} 

GameSchema = new Schema 
    identifier: String 
    users: [UserSchema] 

我要確保在遊戲中的每個用戶都有一個唯一的用戶名。但是,如果我添加

unique: true 

的用戶名定義,那麼這似乎爲強制所有遊戲的獨特性,而不僅僅是用戶所在的遊戲中。另外,如果我有超過1場比賽沒有用戶,然後我得到了以下錯誤:

games.$users.username_1 dup key: { : null } 

我嘗試添加自定義驗證的用戶名字段手動檢查,如果該用戶名的範圍內已經採取父遊戲,但在貓鼬中,驗證器函數只接收用戶名的實際字符串,所以我沒有任何方法檢查用戶名在遊戲中是否是唯一的,因爲我無法獲得對父遊戲文檔的引用在驗證器功能中。

有什麼辦法可以在貓鼬中完成這種驗證嗎?

回答

1

當你發現了,加入了獨特的索引到一個數組的場陣列內不強制唯一性,確保沒有兩個文件集合中包含數組中的同一字段值。

取而代之,請查看$addToSet數組運算符,這是一種只有在數組中不存在數組的情況下才能將數值自動添加到數組中的方式。