2010-11-19 61 views
7

最初發布Grails的郵件列表...Grails的MongoDB的插件:嵌入式集合VS參考

我不是一般數據庫的傢伙,但與最新的MongoDB插件的Grails的版本,我想看看有什麼重要的是與noSQL數據庫。 MongoDB看起來很有趣。我讀的面向文檔存儲的信息和整個以下情形傳來:

客戶/訂單/訂單項

的醫生說訂單應該是一個集合。客戶收集。 line-items應該是嵌入在order對象中的一系列行項目。

關於GORM,這種模式如何保證?我通常有以下幾種:

class Customer { 
    static hasMany = [orders: Order] 
} 

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

class OrderItem { 
    static belongsTo = [order:Order] 
} 

如何確保訂單是其自己的集合並且不嵌入客戶內?如果這是默認值,那麼如何確保OrderItems嵌入到Order中而不是它自己的集合中?這裏的默認值是什麼?

感謝。

回答

10

從閱讀Grails的MongoDB插件文檔看來,您似乎需要專門聲明嵌入對象,並且引用是默認值。

考慮到這一點,如果你想確保訂單是其自己的收藏,並且被嵌入的OrderItems,試試這個:

class Customer { 
    List<Order> orders 
} 

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

class OrderItems { 
    // properties go here. 
} 

Here's the documentation.

+0

嗨,這個答案是有幫助的,但它並沒有真正回答這個問題 - 它只提供了找到答案的方向。具體來說,我仍然不清楚諸如「hasMany」之類的東西是否會在MongoDB上下文中使用(如果不是這樣的話),如果不是這樣,那麼應該如何在域類中表示這種集合正確存儲在MongoDB中。我想如果Gregg的問題(「我如何確保訂單......嵌入到訂單中而不是它自己的集合?這裏的默認值是什麼?」)被明確回答,這將成爲一個很好的示例。 – mindthief 2011-07-20 01:04:07

+1

@mindthief:更新答案在回答問題時要更加明確。另外,我相信「hasMany」更像是一種關係數據庫概念,這就是爲什麼MongoDB不使用它的原因。 – Pat 2011-07-20 13:29:42

+0

...謝謝拍! – mindthief 2011-07-20 22:01:45