我上周刚刚开始使用Mongoid。我遇到了这个关联问题,我不确定我的方法是否正确。所以我想我会要求一些意见
我有一个用户模型和一个项目模型 类用户 包括Mongoid :: Document 字段:电子邮件 结束 班级项目 包括Mongoid :: Document 字段:名称 端
实际上,用户模型是由身份验证宝石Devise创建的,所以我猜它不能嵌入到Project中。
因此,如果我想要旧的多对多关联,其中用户可以拥有许多项目,而项目可以拥有许多用户。我该如何设置呢?
我的方法是这样的: 类用户 包括Mongoid :: Document 字段:电子邮件 references_many:projects referenced_in:project,:inverse_of => :用户 结束 班级项目 包括Mongoid :: Document 字段:名称 references_many:用户 referenced_in:user,:inverse_of => :项目 端
对于MongoDB架构来说,这是一种正确的方式来进行这样的多对多关联吗?
谢谢
答案 0 :(得分:5)
Mongoid文档解释了如何在http://mongoid.org/en/mongoid/docs/relations.html#has_and_belongs_to_many执行此操作。向下滚动到标题关系关联。在显示的代码示例中,Person和Preference模型之间存在多对多关系。
答案 1 :(得分:1)
文档数据库在多对多方面实际上非常糟糕,因为这几乎是关系数据的本质。当数据是分层的而不是关系数时,mongo会发光。
我会做什么(假设用户只有他们的电子邮件会更多),将用户存储在单独的集合中,并将用户ID数组存储在项目文档中。如果它只是电子邮件,我会将它们存储在项目文档中,并且只是接受它会更贵,然后用户可能应该更改他们的电子邮件。