我对Mongo非常陌生,我试图理解我在不同的表/集合之间如何建立关系。
例如 USER 与他的 POST(S)之间的关系。在SQL中,我会创建两个表,并为每个帖子提供USER的USERID。
我如何在Mongo中这样做?我是否制作 2个单独的收藏品,一个用于用户,一个用于帖子。或者将帖子嵌入到用户集合中,如this
谢谢!
答案 0 :(得分:0)
MongoDB的方式是嵌入USERS集合中的帖子。
如果你想以关系方式进行,你可以在POSTS集合中放置一个OBJECTID键,并在USERS集合中的ARRAY键中引用该OBJECTID。
但是我会警告你,如果你预见在你的数据集中使用很多关系操作,那么MongoDB可能不是你想要的方法。我建议Postgresql。
答案 1 :(得分:0)
这一切都取决于您的具体情况,最重要的是您的使用模式(最终您的查询)。
如果您通常在应用程序的某个区域处理用户而在另一个区域处理帖子,那么将它们分成两个集合肯定是(唯一)正确的方式。
如果您总是需要“从用户的上下文中查看帖子”,那么将帖子合并到用户文档中是一种有效的方法。但请注意16MB的文档限制。因此,如果用户在某个时刻拥有超过约16MB的帖子,那么您就会遇到需要大量更改内容的问题。
如果您的申请一般侧重于帖子,但还需要显示例如然后,您可以将用户数据与帖子分开,但将用户名存储在用户所做的每个帖子中。在这种情况下,如果用户更改其名称,您将需要在第二个集合中的主用户记录之上更新该用户的所有帖子。请注意,一旦完全采用MongoDB风格,数据复制通常是必要的恶魔。
......就潜在的设置而言,还有其他各种灰色阴影。没有权利或非常错误。更适合你的情况更糟糕。 ;)就像我最初写的那样,它是在写入性能,读取性能,对数据进行分析的轻松/痛苦等方面之间的权衡,我将使用术语用法或数据访问模式总结...