【问题标题】:How to construct this database in mongodb?如何在mongodb中构建这个数据库?
【发布时间】:2012-08-04 00:02:19
【问题描述】:

假设我在 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???

获取应用

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    是的,users 集合可以跟踪用户添加了哪些应用程序,就像您指出的那样。

    这在 MongoDB 中称为 linking。在关系系统中,您可能会创建一个单独的表added_apps,其中包含用户 ID、应用 ID 和任何其他相关信息。但既然你不能加入,把这些信息保存在users集合中是完全合适的。

    来自the docs

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

    MongoDB 中没有连接——分布式连接在 1000 个服务器集群上会很困难。嵌入有点像“预加入”数据。文档内的操作很容易被服务器处理;这些操作可以相当丰富。 相反的链接必须由应用程序在客户端进行处理;应用程序通过发出后续查询来执行此操作。

    (这是您需要做的额外操作,从用户存储的AppId 中获取应用信息。)

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

    ...

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-26
      • 2016-04-02
      • 2011-10-13
      • 1970-01-01
      • 2015-05-04
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多