0

私のアプリケーションには、FacebookとTwitterの両方のユーザーがいます。これで、ユーザーは2つのアカウントをマージできます。つまり、FacebookまたはTwitterのいずれかのアカウントでログインできます。

今、こんなモデルがあります。


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

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

ここで、これら2つのアカウントが同じであり、ユーザーが自分のアカウントの1つを別のアカウントにマージまたは接続することを決定した場合。このモデルを効果的に変更し、パフォーマンスも変更するにはどうすればよいですか。私は別のオブジェクトを持っていることを考えています

{"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"] }

これがパフォーマンスとスケーラビリティの最良の方法であるかどうかわかりませんか?

4

1 に答える 1

0

最初からユーザーコレクションに1つのユーザードキュメントを含めてみませんか?代わりに、次のようにモデル化できます。


{
   "_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には、配列を処理するための操作がたくさんあります。それらに追加したり、配列内の1つのアイテムのみを更新したりすることができます。

Mongoと結合することは、今のところ処理が苦手な複雑さをもたらします。アプリケーションでその「参加」を行う必要があります。

また、このモデルは、1つのドキュメントに他の形式の認証を追加できることを意味します。

于 2013-02-10T19:47:19.150 に答える