说我在mongodb中有两个集合,一个用于包含用户基本信息的用户,另一个用于包含应用程序的应用程序。如果允许用户添加应用程序,则下次登录时,网络应该获得用户为他们添加了应用程序。我应该在mongodb中构建这种数据库。
users:{_id:ObjectId(),username:'username',password:'password'}
apps:{_id:ObjectId(),appname:'',developer:,description:};
我应该如何为用户添加应用程序?我应该添加类似addAppId的东西:
users:{_id:ObjectId(),username:'username',password:'password',addedApppId:[]}
指示他们添加了哪个应用,然后使用 addedAppId ???
获取应用答案 0 :(得分:1)
是的,users
集合没有任何问题,可以跟踪用户添加的应用,就像您指示的那样。
这在MongoDB中称为linking
。在关系系统中,您可能会创建一个单独的表added_apps
,该表具有用户ID,应用程序ID和任何其他相关信息。但由于您无法加入,因此将此信息保留在users
集合中是完全合适的。
来自the docs:
设计MongoDB架构时的一个关键问题是何时嵌入和何时链接。嵌入是BSON文档中对象和数组的嵌套。链接是文档之间的引用。
MongoDB中没有连接 - 在1,000个服务器群集上分布式连接很困难。嵌入有点像“预加入”数据。文档中的操作很容易让服务器处理;这些操作可以相当丰富。 相反的链接必须由应用程序在客户端处理;应用程序通过发出后续查询来执行此操作。
(这是您需要执行的额外操作,从用户存储的AppId
中获取应用信息。)
通常,对于实体之间的“包含”关系,应选择嵌入。不使用链接时使用链接会导致数据重复。
...
通常通过链接完成多对多关系。