Grails MongoDB 插件:嵌入式集合与引用

Posted

技术标签:

【中文标题】Grails MongoDB 插件:嵌入式集合与引用【英文标题】:Grails MongoDB Plugin: Embedded Collections vs References 【发布时间】:2011-05-12 10:00:10 【问题描述】:

最初发布在 Grails 邮件列表中...

我一般不是数据库专家,但随着 grails 的最新 mongodb 插件的发布,我想看看 noSQL 数据库有什么大不了的。 MongoDB 似乎很有趣。我正在阅读有关面向文档的存储的信息并遇到以下情况:

客户/订单/订单行项目

文档说订单应该是一个集合。客户收藏。 line-items 应该是嵌入在 order 对象中的 line-items 数组。

关于 GORM,如何确保这种模式?我通常有以下内容:

class Customer 
    static hasMany = [orders: Order]


class Order 
    static hasMany = [orderItems: OrderItem]
    static belongsTo = [customer:Customer]


class OrderItem 
    static belongsTo = [order:Order]

我如何确保 Orders 是它自己的集合而不是嵌入到 Customer 中?如果这是默认设置,我如何确保 OrderItems 嵌入 Order 而不是它自己的集合?这里的默认是什么?

谢谢。

【问题讨论】:

【参考方案1】:

通过阅读 Grails MongoDB 插件文档,您似乎需要专门声明嵌入式对象,引用是默认值。

考虑到这一点,如果您想确保 Orders 成为自己的集合,并且 OrderItems 被嵌入,请尝试以下操作:

class Customer 
  List<Order> orders


class Order 
  List<OrderItem> orderItems
  static embedded = [ 'orderItems' ]


class OrderItems 
  // properties go here.   

Here's the documentation.

【讨论】:

嗨,这个答案很有帮助,但它并没有真正回答问题——它只是提供了寻找答案的方向。具体来说,我仍然不清楚是否会在 mongodb 上下文中使用“hasMany”之类的东西(我猜不是),如果没有,那么在域类中应该如何准确地表示这些集合是正确存储在 mongodb 中。我认为如果明确回答 Gregg 的问题(“我如何确保 Orders ... 嵌入 Order 而不是它自己的集合?这里的默认设置是什么?”),这将是一个很好的学习例子。 @mindthief:更新了答案,使其在回答问题时更加明确。另外,我相信“hasMany”更像是一种关系数据库的概念,这也是 MongoDB 不使用它的原因。

以上是关于Grails MongoDB 插件:嵌入式集合与引用的主要内容,如果未能解决你的问题,请参考以下文章

Grails GORM MongoDB。父模型类的问题

Grails Mongodb 嵌入式文档?错误?

每个子类的 Grails 继承 MongoDb 集合

在 grails 中迁移 mongodb 插件时发生异常

无法使用 mongodb 插件版本 3.0.3 运行 Grails 应用程序

如何更改生成表中的列顺序(grails 约束不适用于 mongodb 插件)