如何在 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 中为这样的链接帐户建模?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mongodb 中为新日期创建新对象?

如何在 Symfony 中为使用 queryBuilder 构建的 MongoDB 查询编写单元测试

在猫鼬中为朋友模式建模?

如何在 appengine 中为追随者流建模?

如何在 MongoDB 中建模关系? [复制]

如何在 Powershell 中为“网络服务”帐户创建 Windows 服务?