2013-11-14 77 views
1

在一個項目上工作時遇到存儲不同護照策略(local,facebook,twitter)的用戶信息的問題。 在的遊戲內我UserSchema有過這樣的樣子:多策略sigup用戶表的模式

User = mongoose.Schema(
    { 
     "email" : { type : String , lowercase: true , trim : true , unique : true } , 
     "providerId" : { type : String } , 
     "providerName" : { type : String } , 
     "hashedPassword" : { type : String } , 
     "salt" : { type : String } , 
     "strategy" : { type : String } , 
     "created" : { type : Date , default : new Date().valueOf() } , 
     "lastConnected" : { type : Date , default : new Date().valueOf() } , 
     "accessToken" : { type : String } , 
     "securityToken" : { type : String , default : "" } , 
     "roles" : [ { type : String } ] 
    } 
); 

但唯一的電子郵件與電子郵件帶來的問題,因爲兩個用戶與Twitter stategy將空的電子郵件,這會導致錯誤。

我想過不要讓電子郵件獨一無二,但這會帶來很多問題(從第一眼看)。 我看到的一個解決方案是爲每個策略制定不同的模式,但這非常難以維護。

有沒有解決這個問題的其他方法。什麼是最佳實踐?

P.S.我發誓我GOOGLE了,但沒有找到任何解決方案

回答

1

看來你想能夠說unique:true並指定allowNulls。現在看起來可能如下:https://stackoverflow.com/a/9693138/1935918

+1

對於稀疏索引,兩個'null'條目仍然會違反唯一性約束。但是,如果在文檔爲空時(即,只有*當它具有適當的值時添加它),則不會將'email'屬性添加到文檔中,它將起作用。 – robertklep

+0

@robertklep你的版本適合我。謝謝 –