MongoDB,Grails和关系

我很好奇Grails的MongoDB插件如何处理关系。为了测试这个我做了两个域类一个非常简单的应用:MongoDB,Grails和关系

Author■找两个领域:String firstNameString lastName

Book■找两个领域:String titleAuthor author

建立的MongoDB后和Grails我做了一些Author s和Book s,并使用MongoDB交互式shell进行了窥视。我发现,关系的处理方式与在关系数据库中处理的方式相同:引用其他对象的ID字段。

所以,现在的问题:

  1. 为了格姆拉这一关,它需要一个单独的连接来检索每个文件?
  2. 如果是的话,在PostgreSQL或MySQL这样的关系型数据库中这样做会不会更好?
  3. 如果上述两个问题的答案确实是'是',那么是否有更好的方法来管理文档数据库(如MongoDB)中的关系?我意识到MongoDB不应该是关系型的,但有些东西我没有看到如何在没有重复数据的情况下解决关系(从而导致更新噩梦)。

编辑:我也刚刚注意到,我的作者的'id'属性没有正确排序grails。这是否与使用MongoDB有关?在shell中,我可以看到Grails生成的所有文档的_id属性的数据类型为NumberLong

回答:

我知道MongoDB是不应该的关系,但也有一些事情,我不知道如何解决的关系,而不复制数据

然后不出汗。 MongoDB不是反关系的,它是面向文档的。

在这种情况下,Books和Authors是两个顶级对象。嵌套其中任何一个都是不合理的,它们本身都是核心实体。如果每本图书只有一个作者(N:1),则该图书包含作者的“引用”是完全合理的。当然你必须做两个查询。但是这和做连接查询有很大的不同吗?连接查询仍然需要执行两个索引查找和两个数据查找。所以你在这里没有花费任何东西。

在每本书支持多个作者(M:N)的情况下,根据您的需要您有several options。

我不喜欢想的MongoDB为“没有关系”,我认为这是清洁想到的MongoDB作为查询优化

我也刚刚注意到,grails没有正确排序我的作者的'id'属性...

我会与Grails的作者直接检查。听起来他们可能正在存储“字符串”而不是实际的ObjectIds(或MongoIDs)。虽然不重要,但这可能是一个错误。

回答:

关于id属性,文档现在显示您可以在您的域类中声明ObjectId idString id以便不使用使用迭代long的默认GORM实现。只需在班级中声明该字段,然后该插件将处理其余的部分。

以上是 MongoDB,Grails和关系 的全部内容, 来源链接: utcz.com/qa/260224.html

回到顶部