2013-02-08 24 views
0

我的應用程序有facebook和twitter用戶。現在,用戶可以將兩個帳戶合併在一起,這意味着他們可以使用Facebook或Twitter帳戶登錄。如何在MongoDb中對此類連接帳戶建模?

現在,我有一個這樣的模型。

 

{ "_id" : ObjectId("51103a3e69931d2f03000001"), "email" : "email", "id" : "twitter_id", "token" : "token", "secret" : "secret"} 

{ "_id" : ObjectId("51103a3e69931d2f03000001"), "email" : "email", "id" : "facebook_id", "token" : "token", "secret" : ""} 
 

現在,如果這兩個帳戶是相同的,並且用戶決定合併或連接他的賬戶中的一個東西。我應該如何有效地改變這個模型和性能。我想有另一個對象,這兩個帳戶稱爲

{"linked_ids" : ["facebook_id", "linkedin_id" ]}

。所以,數據會是這樣的。一旦合併。

 

{ "_id" : ObjectId("51103a3e69931d2f03000001"), "email" : "email", "id" : "twitter_id", "token" : "token", "secret" : "secret", "linked_id" : ["facebook_id"] } 

{ "_id" : ObjectId("51103a3e69931d2f03000001"), "email" : "email", "id" : "facebook_id", "token" : "token", "secret" : "", "linked_id" : ["twitter_id"] } 
 

不知道這是否是性能和可擴展性的最佳方式?

回答

0

爲什麼不從一開始就在用戶集合中有一個用戶文檔?你可以用這種方式來建模:

 

{ 
    "_id" : ObjectId("..."), 
    "username" : "bob123", 
    "accounts" : [ 
     { 
     "email": "email", 
     "id": "twitter_id", 
     "token": "token", 
     "secret": "secret", 
     "type" : "Twitter" 
     }, 
     { 
     "email": "email", 
     "id": "facebook_id", 
     "token": "token", 
     "secret": "", 
     "type" : "Facebook" 
     } 
    ] 
} 
 

Mongo有很多操作來處理數組。您可以添加到它們中,僅更新陣列中的一個項目等。

與Mongo進行連接會導致複雜性,它不擅長處理。您必須在應用程序中「加入」。

此外,此模型意味着您可以在一個文檔中添加任何其他形式的身份驗證。