2012-08-07 66 views
0

说我在MongoDB中有两个集合,一个是包含用户基本信息的用户,另一个是包含应用程序的应用程序。如果允许用户添加应用程序,那么当用户下次登录时,Web应该让用户为他们添加应用程序,我应该在MongoDB中构建这种类型的数据库。如何用mongodb构建这个数据库?

users:{_id:ObjectId(),username:'username',password:'password'} 
apps:{_id:ObjectId(),appname:'',developer:,description:}; 

我应该如何为用户添加应用程序?我应该添加类似addedAppId一样:

users:{_id:ObjectId(),username:'username',password:'password',addedApppId:[]} 

,表示他们已经添加了应用程序,然后开始使用addedAppId的应用???

回答

1

是的,users集合跟踪用户添加的应用程序没有任何问题,就像您指出的那样。

这就是在MongoDB中被称为linking。在关系系统中,您可能会创建一个单独的表,added_apps,它具有用户ID,应用程序ID和任何其他相关信息。但由于您无法加入,因此将这些信息保存在users集合中是完全合适的。

the docs

设计MongoDB的架构时的一个关键问题是,当嵌入以及何时链接。嵌入是在BSON文档中嵌套对象和数组。链接是文档之间的引用。

MongoDB中没有连接 - 在1,000个服务器集群上分布式连接会很困难。嵌入有点像“预加入”的数据。文档中的操作对于服务器来说很容易处理;这些操作可能相当丰富。 对比链接必须由应用程序处理客户端;应用程序通过发出后续查询来完成此操作。

(这是用户的存储AppId你需要从做,获取应用程序信息的额外位。)

一般来说,对于“包含”实体之间的关系,嵌入应该是选择。不使用链接时使用链接会导致数据重复。

...

多对多关系通常是通过链接来完成。

+0

thanx man it really really help – paynestrike 2012-08-07 02:05:34