如何在 MongoDb 中为这样的链接帐户建模?
Posted
技术标签:
【中文标题】如何在 MongoDb 中为这样的链接帐户建模?【英文标题】:How to model linked accounts like this in MongoDb? 【发布时间】:2013-01-23 16:40:01 【问题描述】:我的应用程序同时拥有 facebook 和 twitter 用户。现在用户可以将两个帐户合并在一起,这意味着他们可以使用 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" : ""
现在,如果这两个帐户相同,并且用户决定将其中一个帐户合并或连接到其他内容。我应该如何有效地改变这个模型和性能。我正在考虑使用另一个名为
的对象
"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"]
不确定这是否是提高性能和可扩展性的最佳方式?
【问题讨论】:
【参考方案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 有很多操作来处理数组。您可以添加它们,仅更新数组中的一项,等等。
使用 Mongo 进行连接会引入复杂性,目前它并不擅长处理。你必须在你的应用程序中“加入”。
此外,此模型意味着您可以在一个文档中添加任何其他形式的身份验证。
【讨论】:
以上是关于如何在 MongoDb 中为这样的链接帐户建模?的主要内容,如果未能解决你的问题,请参考以下文章